C++ 如果类中有一个指针数据成员,而我没有用new, 析构函数要不要delete?
更详细一点,类中的那些int,char之类的,为什么都不用delete,c++是自动把他们占得内存给释放掉了吗?...
更详细一点, 类中的那些int, char之类的, 为什么都不用delete, c++是自动把他们占得内存给释放掉了吗?
展开
5个回答
展开全部
C++ 如果类中有一个指针数据成员,而你没有用new, 析构函数是不用delete的?在类中,int char 这些只要不是new的,也同样不用释放,系统会自动把他们占的内存释放掉,只有new 的才会手动的去delete。int char ,这些基本类型,是局部变量,存在于栈上。而一个指针定义的时候,也是在栈上比如int *p;p在栈上,而且p的值也是栈的一个地址。但是当int *p = new int ;这时候,p这个变量是在栈上的。但是p的值是一个地址,这个地址是堆上的一个地址。如果不delete p;那么,这个地址会一直被占用着,不能被其他的对象所使用,所以我们用完这个地址,要把这个地址释放掉。不知道你懂了没有,不懂的再追问。
展开全部
变量实际占用的内存分两种分配情况:
一种在栈(stack)上分配,直接声明变量就是在栈上分配的、无法通过new来在栈上分配,无需delete
一种是在堆(heap)上分配,通过new等方式分配,需要delete
1)如果类中有一个指针数据成员,而我没有用new, 析构函数要不要delete?
不需要。
2)类中的那些int, char之类的, 为什么都不用delete, c++是自动把他们占得内存给释放掉了吗?
类对象在分配的时候,就连同内部的int、char这些变量也分配内存了,类对象释放的时候、这些变量也会随着释放。
当类对象在stack上分配,那就没有什么需要特别处理的。
当类对象在heap上分配,只要delete掉类对象,这些int、char变量也就跟随着释放掉了。
一种在栈(stack)上分配,直接声明变量就是在栈上分配的、无法通过new来在栈上分配,无需delete
一种是在堆(heap)上分配,通过new等方式分配,需要delete
1)如果类中有一个指针数据成员,而我没有用new, 析构函数要不要delete?
不需要。
2)类中的那些int, char之类的, 为什么都不用delete, c++是自动把他们占得内存给释放掉了吗?
类对象在分配的时候,就连同内部的int、char这些变量也分配内存了,类对象释放的时候、这些变量也会随着释放。
当类对象在stack上分配,那就没有什么需要特别处理的。
当类对象在heap上分配,只要delete掉类对象,这些int、char变量也就跟随着释放掉了。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
不用,delete必须要和new配套使用。int,char的内存是使用的堆栈内存,而new出来的对象是存储在堆内存,堆内存的申请和释放是由程序员自己操作的;堆栈内存中的数据只要生命周期结束了会自动释放,不用自己去delete的。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
delete 和new是成对使用的,你没new,当然不需要delete。
是的,你说的int,char之类是在运行栈中存放的,c++自动释放他们的内存。
是的,你说的int,char之类是在运行栈中存放的,c++自动释放他们的内存。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
开辟变量生成在堆区,要自己释放,不然倒置内存泄露!开辟变量在栈,在它的scope(存活区域)外,系统自动释放。C++中的对象都是在堆区的。类成员随着对象的delete而消失。而临时变量时过了生存周期就挂了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询