Использование этого указателя - PullRequest
4 голосов
/ 22 июня 2010

У меня есть вопрос, касающийся использования «this».

Предположим, у меня есть два класса A & B;Их примерный план таков:

class A
{
public:
   ...
   void AddB( B* b )
   {
      // inserts B into the vector v
   }

private:
   std::vector<B*> v;
};

class B
{
public:
   ...

   void foo( void )
   {
      ...

      // Adds itself to the queue held in A
      a.AddB( this );
   }  
};

Использует ли "это" таким образом вообще плохую практику?

Спасибо за помощь.

Ответы [ 2 ]

9 голосов
/ 22 июня 2010

Нет, в этом нет ничего плохого, если вы внимательно относитесь к владению и удалению.

2 голосов
/ 23 июня 2010

Если вы можете ввести повышение, лучше использовать boost::shared_ptr вместо прямых указателей, потому что вы избавитесь от необходимости вручную освобождать память в правильном порядке.И вы исключите возможность наличия висячих указателей, которые указывают на уже освобожденную память.

Тогда вы можете использовать shared_from_this() вместо this.Он создаст общий указатель вместо прямого указателя для вашего типа.Ваш тип B будет производным от enable_shared_from_this.

Ваш тип A будет содержать вектор boost::shared_ptr<B> вместо прямых указателей.

Вот пример .

...