gpt4 book ai didi

c++ - 捕获共享指针中的内存泄漏?

转载 作者:行者123 更新时间:2023-11-30 00:35:39 25 4
gpt4 key购买 nike

标题几乎说明了一切,我几乎肯定它在复制构造函数或赋值运算符中,而且我很确定它是后者。这是一个非常短的类(class),所以我会发布整个类(class),任何关于如何处理它的建议都会很好。老实说,我在这里也有点不知所措,所以任何指向一些可靠阅读的东西都将不胜感激。

#pragma once

//for non-learning purposes, boost has a good smart pointer
template <class type>
class sPtr
{
private:
type *p;
int r; //referenceCount

void add()
{
r++;
}
int release()
{
return --r;
}
public:
sPtr(): p(NULL), r(1) {}
sPtr(type *pValue): p(pValue)
{
add();
}
sPtr(const sPtr<type> & sp): p(sp.p), r(sp.r)
{
add();
}
~sPtr()
{
if(release() == 0)
{
delete p;
}
}

type* get()
{
return p;
}

type& operator*()
{
return *p;
}
type* operator->()
{
return p;
}
sPtr<type>& operator=(sPtr<type> sp)
{
std::swap(this->p, sp.p);
std::swap(this->r, sp.r);
add();

return *this;
}
};

我很确定赋值运算符应该通过引用传递,但我不确定这将如何影响实现。我尝试了几种不同的实现,但它们仍然存在泄漏。

最佳答案

您的每个共享指针都跟踪其自己单独的引用计数。这显然不好。当一个被销毁时,其他的引用计数不会更新。您需要将引用计数保存在所有共享指针都可以访问的单独位置。

关于c++ - 捕获共享指针中的内存泄漏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18383201/

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