传递带有“this”作为参数的 shared_ptr 并将其存储在变量中

Posted

技术标签:

【中文标题】传递带有“this”作为参数的 shared_ptr 并将其存储在变量中【英文标题】:pass a shared_ptr with "this" as a parameter and store it in a variable 【发布时间】:2012-02-07 06:08:34 【问题描述】:

我想用“this”传递一个MyClass对象的引用,调用另一个类的方法。

MyClass 是这样定义的

typedef boost::shared_ptr<class MyClass> MyClassRef;

class MyClass 
  //bla bla bla
;

MyClass::method()
  someObject->someMethod(this); //this object is from the ReceiverClass

我的主要应用程序是这样创建对象的:

myObject = MyClassRef( new MyClass());

那么我必须如何在 ReceiverClass 中定义 someMethod() 以接收“this”作为参数,然后将其存储在成员变量中??

在伪代码中我认为它会是这样的......

class ReceiverClass 
  public:
    void someMethod(shared_ptr param);
    shared_ptr mReference;
;

ReceiverClass::someMethod(shared_ptr param)
    mReference = param;

...但我完全迷路了。

【问题讨论】:

boost::enable_shared_from_this. 您遇到了什么问题? 问题是我不知道该怎么做。 【参考方案1】:

就像 Ethan Steinberg 暗示的那样,让 MyClass 继承自 boost::enable_shared_from_this (或 std::tr1 或 std 版本,具体取决于您的编译器可用的内容)。然后将您的方法称为 someObject->someMethod(shared_from_this())。

这个想法是 shared_from_this() 将 shared_ptr 返回给调用对象,这似乎是您正在寻找的对象。

【讨论】:

MyClass 已经继承自其他类。 (我知道,不在示例中) @Pier:在C++中,可以继承更多的基类。

以上是关于传递带有“this”作为参数的 shared_ptr 并将其存储在变量中的主要内容,如果未能解决你的问题,请参考以下文章

将 'const QVariant' 作为 'this' 参数传递会丢弃限定符 [-fpermissive]

C++ CreateThread函数如何传递this指针作为参数

在 C++ (Arduino) 中将带有参数的函数作为参数传递

将“const”作为“this”参数传递时出错

将“this”作为参数传递,但在调用函数的上下文中操作

错误:将 xxx 作为 xxx 的“this”参数传递会丢弃限定符