我正在使用C++ 11一个工厂模式,其是在我的主()函数的范围和被调用这样的:C++寿命返回智能指针
histogram_requests -> AddNewPostfix(Postfix_factory :: get_postfix("Layers", ntuple_reader));
的Postfix_factory :: get_postfix()是一个静态成员函数,返回std :: unique_ptr <后缀>。一个示例返回值是:
return std :: move(std :: unique_ptr<Postfix>(new Layers_postfix(ntuple_reader_p)));
我的第一个问题是,如果这实际上是有效的吗?返回的指针是否在main()范围的末尾被销毁?
第二件事是我想把这个指针传递给一个函数。什么是正确的做法?我的程序编译当我设置AddNewPostFix()到任何一个的std ::的unique_ptr的自变量类型或的std ::的unique_ptr & &但未能作为一个简单的参考。我不想让我的AddNewPostFix()意外删除我的指针中的数据,但我不确定这些是否安全。任何人都可以告诉我如何正确和安全地做到这一点?
我其实有点困惑。如果没有** std :: move()**,我的唯一指针中的数据不会被删除(因为函数返回后让unique_ptr的实例超出范围) –
@AdamHunyadi:是的,它会被删除。这就是它的重点。但到了这个时候,'someFunction'已经完成了它的工作,所以没有问题,除非'someFunction'决定在其他地方存储一个指向'T'的指针,这将是非常邪恶的('global_pointer =&t' )。 –