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

先上代码,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();

巴扎黑

請問一下,執行過步驟5之後,這塊記憶體不是還是沒有被釋放嗎?

迷茫

步驟3理解的沒有問題,步驟4也沒有問題,但是應在增加一步 pPoint = NULL。因為你的delete 只是告訴程式這個指標我不要了,記憶體被釋放掉,指標仍指向那個內存,可能會帶來問題。

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!