【发布时间】:2013-10-18 15:54:28
【问题描述】:
假设我有一个这样的函数f:
class MyClass {
};
boost::shared_ptr<MyClass> f(/*other input parameters*/) {
static boost::shared_ptr<MyClass> p;
if (!p.get() || /*Test if somebody else has a copy of my pointer*/) {
p.reset(new MyClass() );
}
/*Do other stuff*/
return p;
}
我可以检查调用者是否保留了我的指针的副本吗?如果我释放了我的指针,他也释放了他的指针,内存会被释放吗?
【问题讨论】:
-
你不应该想知道,这违背了共享指针的全部目的。一旦最后一个所有者释放指针,就会调用析构函数。
-
@Vlad 我有一个用例(MyClass 是一个支持类,它还包含一个可以根据输入参数重新分配的缓冲区,调用者可以发送指向之前已经创建的 MyClass 的指针,并且函数返回指向 MyClass 的指针,以便调用者可以决定是否将其用于下一次调用),但如果我以不同的方式做事可能会更好。 :)
-
为什么不让
MyClass不可变,并在需要时分配一个新的MyClass?
标签: c++ pointers boost shared-ptr