【发布时间】:2013-03-01 09:44:25
【问题描述】:
这可能是一个“最佳实践”问题,但我想确保我以正确的方式解决这个问题。
我有以下课程:
typedef boost::shared_ptr<MyClass> MyClassPtr;
class MyClass final : public boost::enable_shared_from_this<MyClass> {
public:
/* ctors/dtor ommitted */
MyClassPtr method1() {
// does something
return shared_from_this();
};
MyClassPtr method2() {
// does something
return shared_from_this();
};
}; // eo class MyClass
这是因为我想轻松地将调用链接在一起:
MyClassPtr ptr(myClassFactory.createMyClass());
ptr->method1()->method2()->methodX(); // etc...
这是shared_from_this() 成语的合适用法吗?有没有我不知道的问题,或者有更好的方法吗?
【问题讨论】:
-
为什么要继续复制构造共享指针(这相当昂贵,因为它需要原子增量)?如果这是唯一目的,为什么不返回裸指针?
-
@DavidSchwartz,这确实是我的问题。虽然唯一的目的确实是将调用链接在一起 - 我担心会突然返回一个裸指针。因此我的问题:) 这是“气味”吗?
-
为什么不使用引用。您正在尝试做的事情听起来像是 fluent interfaces 的实现。
-
一个更常见的链接习惯用语,它没有裸指针气味(如果你认为它是一个)将返回对
*this的引用,这样你就有@987654326 @ 或obj.method1().method2().methodX();. -
有什么特别的原因不只是实现
operator->来完成链接吗?
标签: c++ boost shared-ptr