我想在智能指針上獲得一些建設性意見。關於組合強/弱智能指針的意見
C++ 11標準定義了unique_ptr
和weak_ptr
,這樣您就可以將數據依賴關係建模爲具有不導致依賴性循環的「弱」邊的DAG。 因此,強弱指針之間的區別是在類型級別上建模的。
智能指針如何通過狀態標誌決定運行時的所有權?
我們在庫中有一個智能指針,它具有這樣的功能,並且具有可以指向堆或堆棧上的對象的主要優點。
MyClass myObj;
my_ptr<MyClass> ptr(&myObj, Slave());
my_ptr<MyClass> ptr2(new MyClass(), Master());
你看到了哪些其他的優點和缺點? 到目前爲止,我還沒有能夠在任何庫中找到這樣一個智能指針,所以:我們是第一個看到這個特性的需求還是它是一個愚蠢/危險的想法?
感謝您的所有意見!
編輯
顯然,我沒有把我的不夠清楚。 只能有一個主站和任意數量的從站。 這樣,我提出的方案與弱/強指針不同,因爲它更簡單。
的my_ptr
類只存儲一個指針和狀態:
template <typename T>
class my_ptr
{
enum PtrState { MASTER, SLAVE } };
T * ptr;
PtrState state;
my_ptr() : ptr(), state(MASTER) {}
// ...
~my_ptr() { if (state == MASTER) delete ptr; }
// ...
};
弱指針需要調用'lock()'來獲得對象,但強指針不需要。你如何解決這種差異?你是否總是使用'lock()'並且在Master中不做任何事情? – rodrigo 2012-02-21 14:40:28
@rodrigo:也許我忽略了這一點,但我需要'lock()',在我的編輯中也可以找到一些可能的解釋。 – Manuel 2012-02-21 15:26:14
但是,從屬指針有什麼意義。它只是一個包含在'my_ptr'中的普通指針,沒有任何新東西。如果主人被摧毀,那麼所有的奴隸都會徘徊......而這正是弱指針應該避免的。 – rodrigo 2012-02-21 16:16:30