传递带有“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指针作为参数