【发布时间】:2018-11-24 06:38:44
【问题描述】:
我有一个班级 Foo
class Foo;
一个工厂返回一个指向它的指针:
std::unique_ptr<Foo> createFoo();
而且,由于Herb 告诉我,一个对 Foo 的生命周期没有特殊要求的普通函数应该采用普通的裸指针:
void plainf(Foo* f);
我的客户应该如何正确地做到这一点?
plainF(createFoo());
如果他不得不写,他会不高兴的:
auto someName = createFoo();
plainF(someName.get());
【问题讨论】:
-
我告诉你,不要使用裸指针(是的,你可以引用我的话;))
-
@hellow 请阅读“Herb”链接。它很有启发性。裸指针确实很好。
-
好吧,它们在受控环境中很好,每个程序员都知道每个程序员都知道,而不是裸指针意味着观察者指针。我会谨慎行事并使用参考或可选参考。
-
@YSC: std::experimental::observer_ptr 确定。 :) 和 “没有可选引用;如果程序实例化具有引用类型的可选引用,则程序格式错误” :-(
-
@Jarod42 我很惭愧 :/ 是的,observer_ptr 很好,但自从最后一只恐龙死后它是实验性的......
标签: c++ factory smart-pointers temporary