您当前的位置: 首页 >  c++

txwtech

暂无认证

  • 2浏览

    0关注

    813博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

ca42a_demo_c++_new_delete表达式

txwtech 发布时间:2020-02-02 17:23:30 ,浏览量:2

/*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             
关注
打赏
1665060526
查看更多评论
0.0641s