将此指针弱传递给其自己的函数
Pass weak this pointer to its own function
拥有这样的代码是个好主意吗:有什么陷阱吗?使用共享此指针是更好的设计吗?
class X {
public:
void foo();
void bar2(const boost::weak_ptr<X>& x);
};
void X::foo() {}
void X::bar2(const boost::weak_ptr<X>& x) {}
void foo()
{
const boost::shared_ptr<X> x = boost::make_shared<X>();
boost::weak_ptr<X> weakX(x);
x->bar2(weakX);
}
int
main()
{
foo();
return 0;
}
如果传递给函数的参数应该始终是这个weak_ptr
版本,你就有问题了。代码中没有任何强制实施此行为的内容,因此类的用户可以轻松地将weak_ptr传递给另一个class X
对象。
如果您需要的是bar2
能够将shared_ptr
传递给this
,更好的解决方案是使用std::enable_shared_from_this
例
#include <iostream>
#include <memory>
struct Foo : public std::enable_shared_from_this<Foo> {
Foo() { std::cout << "Foo::Foon"; }
~Foo() { std::cout << "Foo::~Foon"; }
std::shared_ptr<Foo> getFoo() { return shared_from_this(); }
};
int main() {
Foo *f = new Foo;
std::shared_ptr<Foo> pf1;
{
std::shared_ptr<Foo> pf2(f);
pf1 = pf2->getFoo(); // shares ownership of object with pf2
}
std::cout << "pf2 is gonen";
}
输出:
Foo::Foo
pf2 is gone
Foo::~Foo
与 http://en.cppreference.com/w/cpp/memory/enable_shared_from_this/shared_from_this 相比
相关文章:
- 这个C++编译器优化(在自身的实例上调用对象自己的构造函数)的名称是什么,它是如何工作的?
- 是否可以在不填充自己的参数的情况下将模板函数作为参数传递?
- 在C++中,我可以在定义自己的复制构造函数后跳过定义赋值运算符吗?
- 在类自己的成员函数中构造类时,如何强制类模板参数推导?
- 在这种情况下,工会成员会调用自己的析构函数吗
- 将自己的函数添加到 ifstream
- 类中的枚举在调用自己的函数时不会改变
- 继承:子项使用父虚函数而不是自己的函数
- 如何在自己的函数中最好地处理Mat中的不同数字格式
- C++我自己的函数进行向量排序
- 是否可以阻止派生类调用自己的函数?(C++)
- 我应该如何在我自己的函数中传递 boost::asio::yield_context
- 为我自己的函数执行通常的算术转换
- 如何在CMake for OpenCV中使用我自己的函数
- 我已经寻找了MPI函数Scatterv的实现,但是我发现了任何可以帮助我编写自己的函数的东西
- 导数使用基函数而不是自己的函数
- 为什么Python运行c++函数比c++通过main()函数运行自己的函数要快?
- 将此指针弱传递给其自己的函数
- 我不知道如何调用自己的函数!C++
- 如何在c++和OpenGL中配置我自己的函数