【发布时间】:2017-02-14 16:13:29
【问题描述】:
我们有一个函数,它返回一个新分配的对象作为输出参数(引用指针)。
MyFunc(MyObject*& obj)
{
obj = new MyObject();
}
这样称呼:
Object* obj;
MyFunc(obj);
该函数在内部做了很多工作,并使用shared_ptr 进行内存管理。完成后,我们要返回的对象由shared_ptr 引用。我正在努力研究如何将新分配的对象作为常规指针返回。
我们希望在内部继续使用shared_ptr 以降低风险,但返回shared_ptr 似乎没有意义,因为调用者对返回的值拥有完全的所有权(被调用的函数或对象不再需要或保留对返回数据的引用),我们希望它们具有灵活性。
是否有人对允许我们在内部使用shared_ptr 但有一个常规指针接口有什么建议?谢谢
【问题讨论】:
-
听起来你应该使用 unique_ptr 代替,然后返回 .get()
-
@AndersK。我也不希望调用者被要求使用 unique_ptr。
-
不能换界面吗?您需要与C代码或其他东西交互吗?为什么不能像惯用的 C++ 那样只返回一个智能指针?对指针的引用太丑陋了。
-
@denver 如果您不共享变量,则在内部使用 unique_ptr,一旦您想通过 .release() 将所有权传递给调用者以获取指针
-
@denver,然后请编辑您的问题,因为尚不清楚您所指的 shered_ptr 的预期/想要/实际范围和生命周期是什么。这可能会在一个正式正确但不适合您的场景的答案与一个适用于您的案例的正确答案之间产生差异。
标签: c++ c++11 pointers shared-ptr