標題幾乎說明了一切,我幾乎肯定它是在複製構造函數或賦值運算符,我敢肯定它是後者。這是一個相當短的課程,所以我會發布整個事情,任何關於如何處理它的建議都會很好。我老實說在這裏也有點頭痛,所以任何指向一些可靠的閱讀將不勝感激。捕獲共享指針中的內存泄漏?
#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;
}
};
我很確定賦值運算符應該通過引用傳遞,但我不確定這將如何影響實現。我嘗試了幾個不同的實現,他們都仍然有泄漏。
它需要一個相對較大的智能指針類重寫,但我終於得到它的工作。感謝提示,如果沒有它,將無法做到。 – headlessgargoyle