[英]How to begin writing a smart pointer?
我剛在大學里接到一項任務,那就是編寫一個智能指針。 我收到了一個框架,需要實現所需的方法。 如果我是對的,那么智能指針是一種指針,它會計算到給定對象(?)的引用號,如果該計數器達到零,它將刪除該給定對象。
這是骨架:
template<class T>
class my_pointer {
public:
my_pointer();
};
class refcounted {
/* the reference counted types should have the public interface that is defined here */
public:
int incRefCnt();
int decRefCnt();
};
int main() {
my_pointer<refcounted> obj1 = new refcounted();
my_pointer<refcounted> obj2 = obj1;
return 0;
}
首先,這條線應該做什么? refcounted不是my_pointer的子級,那么如何實例化一個新的refcounted對象並使用my_pointer對象(指針?)對其進行引用?
my_pointer<refcounted> obj1 = new refcounted();
為什么my_pointer類中沒有計數器,為什么在refcounted類中沒有計數器? 我應該如何開始呢? 我不太擅長C ++。 提前致謝!
將我的評論擴展為答案:
第一個問題:該行應該執行的操作是在堆上創建一個新的refcounted
類型的對象,然后使用隱式轉換構造函數創建指向該對象的智能指針,從而增加其內部引用計數。
第二個問題:看來您應該實現一個侵入式的ref-counted智能指針,其中引用計數存儲在指向的對象內。 這就是兩個引用計數函數的作用。 介入式引用計數的優點是空間效率更高(因為您不需要單獨分配引用計數),並且您可以采用原始指針並將其簡單地轉換為智能指針,而無需關心其他智能指針。已經存在。 它的缺點是無法指向任意類型,並且不支持弱指針。
第三個問題:首先要考慮創建,復制和銷毀智能指針的含義。
首先,這條線應該做什么?
my_pointer<refcounted> obj1 = new refcounted();
該行應從傳遞給它的經過refcounted
原始指針初始化my_pointer<refcounted>
智能指針。
我怎么可能實例化一個新的已引用對象並用my_pointer對象(指針?)引用它?
您可以使用轉換構造函數來實現 。 my_pointer
沒有接受T*
的構造函數,因此似乎已經可以定義。
為什么my_pointer類中沒有計數器,為什么在refcounted類中沒有計數器?
您顯然需要創建一個侵入式指針,該指針希望存儲的對象進行引用計數。
我應該如何開始呢?
我會看一看boost :: intrusive_ptr的描述和界面。 但是,您可能不需要完全相同的界面來進行分配。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.