我想在智能指针上获得一些建设性意见。关于组合强/弱智能指针的意见
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