C++的拷贝构造,指针释放问题
黄舟
黄舟 2017-04-17 11:27:19
0
3
550

先上代码,no code no say

/*
class Point{
//...
};
*/
Point *pPoint = new Point;    //1
Point point;                  //2                
*pPoint = point;              //3
//...
delete pPoint                 //4

关于步骤1new可分解为如下:

//cpp为代码
Point *pPoint = __new( sizeof(Point));   //5
if(pPoint)
{
    pPoint->Point::Point();
}

步骤3,是不是就是调用Point的拷贝赋值函数?
步骤4删除该指针就是针对步骤5进行分配的内存进行释放?
我这样理解是否有错?

黄舟
黄舟

人生最曼妙的风景,竟是内心的淡定与从容!

全員に返信(3)
迷茫

步骤3的理解基本正确,步骤4不只是释放内存,在此之前还会先执行析构函数,基本相当于pPoint->Point::~Point();

いいねを押す +0
巴扎黑

请问一下,执行过步骤5之后,这块内存不是仍然没有被释放吗?

いいねを押す +0
迷茫

步骤3理解的没有问题,步骤4也没有问题,但是应当在添加一步 pPoint = NULL。因为你的delete 只是告诉程序这个指针我不要了,内存被释放掉,指针仍指向那个内存,可能会带来问题。

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!