C++ 如果类中有一个指针数据成员,而我没有用new, 析构函数要不要delete?

2024-11-02 14:06:45
推荐回答(5个)
回答1:

C++ 如果类中有一个指针数据成员,而你没有用new, 析构函数是不用delete的?在类中,int char 这些只要不是new的,也同样不用释放,系统会自动把他们占的内存释放掉,只有new 的才会手动的去delete。int char ,这些基本类型,是局部变量,存在于栈上。而一个指针定义的时候,也是在栈上比如int *p;p在栈上,而且p的值也是栈的一个地址。但是当int *p = new int ;这时候,p这个变量是在栈上的。但是p的值是一个地址,这个地址是堆上的一个地址。如果不delete p;那么,这个地址会一直被占用着,不能被其他的对象所使用,所以我们用完这个地址,要把这个地址释放掉。不知道你懂了没有,不懂的再追问。

回答2:

变量实际占用的内存分两种分配情况:

一种在栈(stack)上分配,直接声明变量就是在栈上分配的、无法通过new来在栈上分配,无需delete
一种是在堆(heap)上分配,通过new等方式分配,需要delete

1)如果类中有一个指针数据成员,而我没有用new, 析构函数要不要delete?
不需要。

2)类中的那些int, char之类的, 为什么都不用delete, c++是自动把他们占得内存给释放掉了吗?
类对象在分配的时候,就连同内部的int、char这些变量也分配内存了,类对象释放的时候、这些变量也会随着释放。
当类对象在stack上分配,那就没有什么需要特别处理的。
当类对象在heap上分配,只要delete掉类对象,这些int、char变量也就跟随着释放掉了。

回答3:

不用,delete必须要和new配套使用。int,char的内存是使用的堆栈内存,而new出来的对象是存储在堆内存,堆内存的申请和释放是由程序员自己操作的;堆栈内存中的数据只要生命周期结束了会自动释放,不用自己去delete的。

回答4:

delete 和new是成对使用的,你没new,当然不需要delete。
是的,你说的int,char之类是在运行栈中存放的,c++自动释放他们的内存。

回答5:

开辟变量生成在堆区,要自己释放,不然倒置内存泄露!开辟变量在栈,在它的scope(存活区域)外,系统自动释放。C++中的对象都是在堆区的。类成员随着对象的delete而消失。而临时变量时过了生存周期就挂了