/*ca42a_demo_c++_new_delete表达式 42_CppPrimer_new_delete // 静态是在堆栈上创建的,动态实在堆(heap)上创建的 // 动态创建对象:自由存储区 new:动态创建对象 1.动态创建对象的初始化 2.动态创建对象的默认初始化 3.耗尽内存 delete:撤销动态创建的对象 1.零值指针的删除 2.在delete之后,重设指针的值 const对象的动态分配和回收
int *pi = new int;//int是内置类型,没有初始化 int *pi2 = new int();//int是内置类型,有括号的是初始化了,默认为0 string *ps = new string;//类类型,使用默认的构造函数进行初始化的。 string *ps1 = new string();//使用默认的构造函数进行初始化的。括号可写可不写
int *pi = &i; string str = "hello"; double *pd = new double(33);
delete pi;//可以编译,但这是一个错误。pi不是动态创建的,没有new 执行时会报如下错误 --------------------------- Microsoft Visual C++ Runtime Library --------------------------- Debug Assertion Failed!
Program: C:\Users\TT2018\source\repos\ca42a_demo\Debug\ca42a_demo.exe File: minkernel\crts\ucrt\src\appcrt\heap\debug_heap.cpp Line: 908
Expression: is_block_type_valid(header->_block_use)
For information on how your program can cause an assertion failure, see the Visual C++ documentation on asserts.
(Press Retry to debug the application)
--------------------------- 中止(A) 重试(R) 忽略(I) ---------------------------
*/
/*ca42a_demo_c++_new_delete表达式
42_CppPrimer_new_delete
//
静态是在堆栈上创建的,动态实在堆(heap)上创建的
//
动态创建对象:自由存储区
new:动态创建对象
1.动态创建对象的初始化
2.动态创建对象的默认初始化
3.耗尽内存
delete:撤销动态创建的对象
1.零值指针的删除
2.在delete之后,重设指针的值
const对象的动态分配和回收
int *pi = new int;//int是内置类型,没有初始化
int *pi2 = new int();//int是内置类型,有括号的是初始化了,默认为0
string *ps = new string;//类类型,使用默认的构造函数进行初始化的。
string *ps1 = new string();//使用默认的构造函数进行初始化的。括号可写可不写
int *pi = &i;
string str = "hello";
double *pd = new double(33);
delete pi;//可以编译,但这是一个错误。pi不是动态创建的,没有new
执行时会报如下错误
---------------------------
Microsoft Visual C++ Runtime Library
---------------------------
Debug Assertion Failed!
Program: C:\Users\TT2018\source\repos\ca42a_demo\Debug\ca42a_demo.exe
File: minkernel\crts\ucrt\src\appcrt\heap\debug_heap.cpp
Line: 908
Expression: is_block_type_valid(header->_block_use)
For information on how your program can cause an assertion
failure, see the Visual C++ documentation on asserts.
(Press Retry to debug the application)
---------------------------
中止(A) 重试(R) 忽略(I)
---------------------------
txwtech
*/
#include
#include
using namespace std;
class Dog
{
//类的成员
};
void demo()
{
int i(1024);//静态创建对象的初始化
int *pi = new int(1024);//动态创建对象的初始化
string s(10,'9');//10个9的字符串。“9999999999”
string *ps = new string(10, '9');//10个9的字符串
}
void demo2()
{
int *pi = new int;//int是内置类型,没有初始化
int *pi2 = new int();//int是内置类型,有括号的是初始化了,默认为0
delete pi;//delete:撤销动态创建的对象
delete pi2;
}
void demo3()
{
int i;
int *pi = &i;
string str = "hello";
double *pd = new double(33);
//delete pi;//可以编译,但这是一个错误。pi不是动态创建的,没有new,执行时会报错误
delete pd;
}
void demo4()
{
int *p = new int(1024);
delete p;//delete把动态创建的对象删除了,p还是保存对象的地址
p = 0;//指针指向0,避免悬垂指针。建议这么操作
}
void demo5()
{
const int *pci = new const int(1024);
const string *pcs = new const string;//类类型
delete pci;
delete pcs;
}
int main()
{
int i;//静态创建对象,对象名:i
int *pi = new int;//动态创建对象,没名!
i = 12;
*pi = 12;
string *ps = new string;//类类型,使用默认的构造函数进行初始化的。
string *ps1 = new string();//使用默认的构造函数进行初始化的。括号可写可不写
Dog dog;
Dog dog2();
Dog *pdog = new Dog;
Dog *pdog2 = new Dog();//类类型,使用默认的构造函数进行初始化的。
delete pi;
delete ps;
delete pdog;
delete pdog2;
cout
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?