c++delete运行报错
本人初学c++,FirstClass*first=newFirstClass();deletefirst;这个是没有问题的但是FirstClassfirst=*(newF...
本人初学c++,
FirstClass *first = new FirstClass();
delete first;
这个是没有问题的
但是
FirstClass first = *(new FirstClass());
delete &first;
这样写运行是会报错,请问是什么原因 展开
FirstClass *first = new FirstClass();
delete first;
这个是没有问题的
但是
FirstClass first = *(new FirstClass());
delete &first;
这样写运行是会报错,请问是什么原因 展开
3个回答
展开全部
你写的(delete &first;)这句是错误的,应该写成(delete first;)
delete &first;的意思是释放指针(first)的内存地址。
在C++中对象可以静态分配(例如普通变量的定义)——即编译器在处理程序源代码时分配,也可以动态分配(运用new运算符)——即程序执行时调用运行时刻库函数来分配。这两种内存分配方法的主要区别是效率与灵活性之间的平衡准则不同,出于静态内存分配是在程序执行之前进行的,因而效率比较高但是它缺少灵活性,它要求在程序执行之前就知道所需内存的类型和数量。
静态与动态内存分配的两个主要区别是
1.静态对象是有名字的变量,我们直接对其进行操作,而动态对象是没有名字的变量
我们通过指针间接地对它进行操作。
2.静态对象的分配与释放由编译器自动处理,程序员需要理解这一点但不需要做任何
事情,相反动态对象的分配与释放必须由程序员显式地管理,相对来说比较容易出错
它通过new 和delete 两个表达式来完成。
3对象的动态分配可通过new 表达式来完成。
例如
int *pint = new int( 1024 );
分配了一个没有名字的int 类型的对象,对象初始值为1024 然后表达式返回对象在
内存中的地址接,接着这个地址被用来初始化指针对象pint ,对于动态分配的内存惟一的
访问方式是通过指针间接地访问。
用完print后,要执行delete pint;// 删除单个对象
如果忘了删除动态分配的内存(没有执行deleted语句)又会怎么样呢,如果真的如此程序就会在结束时出现内存泄漏(英文memory leak)的问题,内存泄漏是指一块动态分配的内存我们不再拥有指向这块内存的指针,因此我们没有办法将它返还给程序供以后重新使用。
delete &first;的意思是释放指针(first)的内存地址。
在C++中对象可以静态分配(例如普通变量的定义)——即编译器在处理程序源代码时分配,也可以动态分配(运用new运算符)——即程序执行时调用运行时刻库函数来分配。这两种内存分配方法的主要区别是效率与灵活性之间的平衡准则不同,出于静态内存分配是在程序执行之前进行的,因而效率比较高但是它缺少灵活性,它要求在程序执行之前就知道所需内存的类型和数量。
静态与动态内存分配的两个主要区别是
1.静态对象是有名字的变量,我们直接对其进行操作,而动态对象是没有名字的变量
我们通过指针间接地对它进行操作。
2.静态对象的分配与释放由编译器自动处理,程序员需要理解这一点但不需要做任何
事情,相反动态对象的分配与释放必须由程序员显式地管理,相对来说比较容易出错
它通过new 和delete 两个表达式来完成。
3对象的动态分配可通过new 表达式来完成。
例如
int *pint = new int( 1024 );
分配了一个没有名字的int 类型的对象,对象初始值为1024 然后表达式返回对象在
内存中的地址接,接着这个地址被用来初始化指针对象pint ,对于动态分配的内存惟一的
访问方式是通过指针间接地访问。
用完print后,要执行delete pint;// 删除单个对象
如果忘了删除动态分配的内存(没有执行deleted语句)又会怎么样呢,如果真的如此程序就会在结束时出现内存泄漏(英文memory leak)的问题,内存泄漏是指一块动态分配的内存我们不再拥有指向这块内存的指针,因此我们没有办法将它返还给程序供以后重新使用。
更多追问追答
追问
delete后面跟指针 delete first编译都不会通过
追答
你不是说“本人初学c++,
FirstClass *first = new FirstClass();
delete first;
这个是没有问题的”的么,怎么会通不过啊,不可能的啊!!!
展开全部
第一个是没有问题的,创建一个指向类的指针,并指向一个新建的类,然后删除该类指针的指向。实际上,删除后仍然可以用first引用该指针指向的类对象。
第二个就有问题了,“FirstClass first”这是创建类对象,你要给类对象初始化只能是给类的数据成员赋值,或者是该类的其他对象。而“*(new firstClass())”是什么东西我实在看不懂。这条语句根本不符合语法规则。
第二个就有问题了,“FirstClass first”这是创建类对象,你要给类对象初始化只能是给类的数据成员赋值,或者是该类的其他对象。而“*(new firstClass())”是什么东西我实在看不懂。这条语句根本不符合语法规则。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
进来学习学习
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询