C++指针释放问题
今天看到了一个问题,其实在项目中也经常遇到指针释放的问题,先看看一个简单的指针释放的问题:
**************************************
问题如下: (1)一般在c++类中有成员指针的话,会在类的析构函数里释放(delete)这个指针? (2)基于(1),如果传给这个成员指针不是一个堆分配的指针,那类发生析构会发生错误,这个怎么解决?? 如下: class A { public: int *p; ~A() { delete p; } } /---------------------------------- { A a; int b = 0; a.p = &b; } /----------------------------------
**************************************
评论如下:
1、析构函数里只会delete在类的构造函数或初始化函数中new的指针;
2、不是new就别在析构中delete了, 另外delete之前 if (p != NULL),delete之后 p = NULL;
3、b是栈上变量,自动释放,不能delete,delete要和new配对使用;
4、对这种情况,有个基本的原则:谁new,谁delete;
也有一种特殊的带引用计数器的指针对象,但是也并非是别人delete,
而是在不使用的时候发出一个减少引用计数的调用,当计数器降为0的时候,由这个对象自己delete。
5、************************************** 很给力的评论
1. 一般的原则是,如果没有在构造函数中new,就不要在析构函数中delete。
2. 在楼主的代码中,由于没有在构造函数中new,所以也就不需要在析构函数中delete。
3. 但楼主说,代码如果是这样写的:
copyright © 2008-2019 亿联网络 版权所有 备案号:粤ICP备14031511号-2