передать shared_ptr с «this» в качестве параметра и сохранить его в переменной - PullRequest
1 голос
/ 07 февраля 2012

Я хочу передать ссылку на объект MyClass с помощью this, вызывая метод другого класса.

Вот как определяется 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());

Итак, как я должен определить someMethod () в ReceiverClass для получения «this» в качестве параметра, а затем сохранить его в переменной-члене ??

В псевдокоде я думаю, что это было бы что-то вроде этого ...

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

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

... но я полностью потерян.

1 Ответ

1 голос
/ 07 февраля 2012

Как намекал Итан Стейнберг, MyClass наследует от boost :: enable_shared_from_this (или версии std :: tr1 или std в зависимости от того, что доступно с вашим компилятором).Затем вызовите ваш метод как someObject-> someMethod (shared_from_this ()).

Идея состоит в том, что shared_from_this () возвращает shared_ptr вызывающему объекту, который, кажется, является тем, что вы ищете.

...