簡體   English   中英

C++ 中的指針構造函數

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM