Dou*_* T. 12 c++ boost reference
假设我有一个类,我希望用户能够引用我的一个成员.哪个更受欢迎?
class Member;
class ClassWithWeakPtr
{
private:
boost::shared_ptr<Member> _member;
public:
boost::weak_ptr<Member> GetMember();
};
Run Code Online (Sandbox Code Playgroud)
要么
class Member;
class ClassWithCppReference
{
private:
Member _member;
public:
Member& GetMember() {return _member;}
};
Run Code Online (Sandbox Code Playgroud)
你怎么看?什么时候比另一个更好?
Mic*_*urr 13
为什么不回来shared_ptr<>?那么客户端可以根据需要使用返回的内容,但是如果"服务器"类消失则没有问题.
没有太多情况下语义weak_ptr<>很有意义(缓存和???).通常当客户要求某事时,它希望拥有由客户自己确定的那个东西(并且共享所有权和完全所有权一样好).
如果你有一个情况,可以在不知道客户端的情况下销毁'server'对象(你可能想要的情况use weak_ptr<>或者shared_ptr<>),你可以做的最糟糕的事情是返回对成员的引用.在这种情况下,客户端无法知道访问返回的引用是否安全.您必须返回该成员的副本或智能指针,该指针可以正确地管理所返回成员的生命周期.
请记住,如果有一个表达式产生一个临时表ClassWithCppReference(并不总是很明显),那么调用的客户端GetMember()甚至不能在下一个语句中使用返回的引用.
我的基本的、无知的指导方针:
我意识到,如果 ClassWithCppReference 的实例可能消失,而某人仍然拥有对成员的引用,则后者可能不安全。但是,我还可以看到后一个类具有 POD 类型的参数,例如发送到设备的消息,并且您不想一直复制该成员。
| 归档时间: |
|
| 查看次数: |
7297 次 |
| 最近记录: |