gpt4 book ai didi

c++ - 可能的内存泄漏?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:54:34 25 4
gpt4 key购买 nike

我是这个概念的新手,所以不要对我太苛刻。为什么这段代码不产生析构函数调用?类的名称是不言自明的。SString 将在 ~SString() 中打印一条消息。它只打印一条析构函数消息。

int main(int argc, TCHAR* argv[])
{
smart_ptr<SString> smt(new SString("not lost"));
new smart_ptr<SString>(new SString("but lost"));
return 0;
}

这是内存泄漏吗?暗示。 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 smart_ptr<SString>(new SString("but lost"));您正在创建一个新的动态分配的智能指针。您不会在任何地方存储分配结果(指向 shared_ptr 的指针 SString ),它是悬空的...因为您不存储结果,您也不能调用 delete对于它 - 因此它的析构函数不会被调用,反过来也是 SString包含对象的析构函数不会被调用!

如果你尝试

smart_ptr<SString> *p = new smart_ptr<SString>(new SString("but lost")); 
delete p;

相反,您会看到针对这种情况也调用了析构函数。

但是,这不是对 smart_ptr 的明智使用. smart_ptr创建后您不需要调用delete手动;因此,不要那样使用它们;像在您的第一条陈述中一样使用它们!

关于c++ - 可能的内存泄漏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12426473/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com