当前位置:  开发笔记 > 编程语言 > 正文

最好返回C++引用或weak_ptr?

如何解决《最好返回C++引用或weak_ptr?》经验,为你挑选了1个好方法。

假设我有一个类,我希望用户能够引用我的一个成员.哪个更受欢迎?

class Member;

class ClassWithWeakPtr
{
private:
   boost::shared_ptr _member;
public:
   boost::weak_ptr GetMember();
};

要么

class Member;

class ClassWithCppReference
{
private:
    Member _member;
public:
    Member& GetMember() {return _member;}
};

你怎么看?什么时候比另一个更好?



1> Michael Burr..:

为什么不回来shared_ptr<>?那么客户端可以根据需要使用返回的内容,但是如果"服务器"类消失则没有问题.

没有太多情况下语义weak_ptr<>很有意义(缓存和???).通常当客户要求某事时,它希望拥有由客户自己确定的那个东西(并且共享所有权和完全所有权一样好).

如果你有一个情况,可以在不知道客户端的情况下销毁'server'对象(你可能想要的情况use weak_ptr<>或者shared_ptr<>),你可以做的最糟糕的事情是返回对成员的引用.在这种情况下,客户端无法知道访问返回的引用是否安全.您必须返回该成员的副本或智能指针,该指针可以正确地管理所返回成员的生命周期.

请记住,如果有一个表达式产生一个临时表ClassWithCppReference(并不总是很明显),那么调用的客户端GetMember()甚至不能在下一个语句中使用返回的引用.

推荐阅读
贾志军
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有