[英]Pointer Constructor in C++
我被要求寫一個SmartPointer
class。 其中一個構造函數采用指針變量,我假設我應該簡單地將指針復制到相關變量。 但是當我嘗試時,我得到一個分段錯誤。 這是 header 文件的內容和我對Pointer Constructor
的實現。
class ReferenceCount {
public:
size_t AddRef() {
return ++count;
}
size_t Release() {
return --count;
}
size_t getCount() const {
return count;
}
private:
size_t count = 0; // Reference count
};
template<typename T>
class SmartPointer {
private:
void free();
// pointer to actual data
T *dataPointer;
// Reference count
ReferenceCount *referenceCount;
public:
//Constructor
SmartPointer();
// Copy constructor
SmartPointer(const SmartPointer<T> &sp);
explicit SmartPointer(T *pValue);
// Assignment operator
SmartPointer<T> &operator=(const SmartPointer<T> &sp);
SmartPointer<T> &operator=(T *pValue);
// Destructor
~SmartPointer();
T &operator*() const;
T *operator->() const;
T *get() const;
ReferenceCount *getReferenceCount() const;
};
構造函數:
template<typename T>
SmartPointer<T>::SmartPointer(T *pValue) {
dataPointer = pValue;
referenceCount = nullptr;
}
您似乎正在編寫類似於shared_ptr<T>
的內容。
對於一個shared_ptr
的智能指針,每個智能指針都有一個指向對象的指針和一個指向控制塊的指針。
當您使用指向對象的指針構造時,您負責創建控制塊。
在您的情況下,您的控制塊名稱是ReferenceCount
。
因此,向該構造函數添加一個new ReferenceCount
。 可能從計數 1 開始。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.