我是新来的概念,所以不要对我很难。 为什么这段代码不产生析构函数调用? 类的名称是不言自明的。 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'。 –