我用new Time(1,0,0)
初始化SmartPtr類。什麼時候用`new`創建的臨時對象調用'delete'?
//main.cpp
int main()
{
SmartPtr pTime0(new Time(0,0,1));
}
我在哪裏打電話刪除new Time(1,0,0)
。一切正常,程序符合並運行。但我很困惑 - 我該在哪裏/不應該delete Time(1,0,0)
?
我不明白在這裏創建和刪除臨時對象的概念。 我知道每當我寫new
某處我必須寫delete
! 有人可以解釋delete Time(1,0,0)
發生在哪裏嗎?
SmartPtr pTime0(new Time(0,0,1))< - new
這裏返回一個指向新分配的內存的指針,然後在ctor中我第二次分配內存new
?
//SmartPtr.cpp
SmartPtr::SmartPtr(Pointee * p):_pointee(new Pointee(*p))
{}
SmartPtr::~SmartPtr()
{
delete _pointee;
}
的SmartPtr是你自己設計的一類?它可以很好地管理對象的生命週期,在這種情況下,類決定何時刪除。 –
我不明白你爲什麼要在SmartPtr的ctor的堆上創建一個新的Pointee。這不是你想要的。你應該簡單地寫'_pointee(p)',即簡單地使用與給定的相同的指針。您的聲明將分配一個新的Pointee並將提供的指針的內容複製到它。 – leemes
我不想'_pointee(p)'。如果p(new Time(0,0,1))在我的類的外部創建,那麼它可能會被刪除('delete p'),而我的SmartPtr析構函數也會'delete _pointee'(初始化爲p )',所以會導致運行時錯誤。我試圖實現的概念是在ctor中分配內存並在dtor中刪除它。 – Oleksandra