类的new和delete
classa{public:a();~a();}voidmain(){a*p;p=newa();。。。到这一步,程序没有结束,但类a没用了,我想释放他可以吗?非得等到程序...
class a
{
public:
a();
~a();
}
void main()
{
a *p;
p=new a();
。。。
到这一步,程序没有结束,但类a没用了 ,我想释放他可以吗?
非得等到程序结束?
可不可以
p->~a();
然后delete p;
。。。
。。。
}
(程序未结束前,我想释放一个类怎么办?)
如果它没用,
也得留到程序结束,才能释放?是这意思吗?怕影响效率
有没有别的思路?没有用时让他消失? 展开
{
public:
a();
~a();
}
void main()
{
a *p;
p=new a();
。。。
到这一步,程序没有结束,但类a没用了 ,我想释放他可以吗?
非得等到程序结束?
可不可以
p->~a();
然后delete p;
。。。
。。。
}
(程序未结束前,我想释放一个类怎么办?)
如果它没用,
也得留到程序结束,才能释放?是这意思吗?怕影响效率
有没有别的思路?没有用时让他消失? 展开
3个回答
展开全部
在C++中如果使用new关键字来创建对象,可以使用关键字delete来释放对象所占内存空间。而析构函数是在对象被释放的时候执行,当然作为类的成员函数也可以显式调用析构函数。所以在delete之前没有必要调用析构函数
其实,具体的来说类在内存中是不占用空间的,只有类的对象才占用内存空间。类只是对有共同属性的对象的一种抽象。当你创建一个对象,对象中只包含非静态的数据成员,至于静态数据成员当然存放在在静态内存区中,至于一个类的成员函数(成员方法)在程序的编译阶段就已经装载到内存的代码段,只有当程序运行完毕才会释放代码段的所有数据。当然静态数据也只在程序运行完毕才会被释放。所以说类是不可能被释放的。
换句话说你如果想释放类,那么只能说明你对类和对象的概念理解有问题。举个例子:“他杀死了一个人”,你当然不能说成是“他杀死了一个人类”。要记住类是抽象的,有怎么可以销毁呢?
其实,具体的来说类在内存中是不占用空间的,只有类的对象才占用内存空间。类只是对有共同属性的对象的一种抽象。当你创建一个对象,对象中只包含非静态的数据成员,至于静态数据成员当然存放在在静态内存区中,至于一个类的成员函数(成员方法)在程序的编译阶段就已经装载到内存的代码段,只有当程序运行完毕才会释放代码段的所有数据。当然静态数据也只在程序运行完毕才会被释放。所以说类是不可能被释放的。
换句话说你如果想释放类,那么只能说明你对类和对象的概念理解有问题。举个例子:“他杀死了一个人”,你当然不能说成是“他杀死了一个人类”。要记住类是抽象的,有怎么可以销毁呢?
参考资料: 自己写的
展开全部
用delete删除指针时,析构函数将自动被调用,不需要写
p->~a();
直接delete p就可以
p->~a();
直接delete p就可以
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
类的构造和析构函数是由编译器自动调用的,不要显式调用.
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询