我是新來的概念,所以不要對我很難。 爲什麼這段代碼不產生析構函數調用? 類的名稱是不言自明的。 SString將在〜SString()中打印一條消息。 它只打印一個析構函數消息。可能的mem泄漏?
int main(int argc, TCHAR* argv[])
{
smart_ptr<SString> smt(new SString("not lost"));
new smart_ptr<SString>(new SString("but lost"));
return 0;
}
這是內存泄漏嗎? 該impl。對於smart_ptr是here
編輯:
//copy ctor
smart_ptr(const smart_ptr<T>& ptrCopy)
{
m_AutoPtr = new T(ptrCopy.get());
}
//overloading = operator
smart_ptr<T>& operator=(smart_ptr<T>& ptrCopy)
{
if(m_AutoPtr)
delete m_AutoPtr;
m_AutoPtr = new T(*ptrCopy.get());
return *this;
}
什麼是'new''d,必須'delete''d。 – DCoder
動態內存越來越無處... !!! –
不管你做什麼,除了學習練習之外,不要使用該實現。即使在糾正了過時的標題名稱並修復了明顯的錯誤之後,它的複製語義仍然無法解決。在實際代碼中使用'std :: unique_ptr'和'std :: shared_ptr'。 –