PDL: метод Destroy
От: integer  
Дата: 06.07.11 06:49
Оценка:
Добрый день!

Вы писали:

Представим себе, что плагин собран компилятором A, а основная программа, использующая его – компилятором B. Если мы загружаем класс из плагина, его экземпляр создаётся кодом, сгенерированным компилятором A. И если мы попытаемся удалить этот экземпляр из кода основной программы просто вызвав деструктор, то удалить его попытается код, сгенерированный компиляторов B. ... Чтобы избежать подобных проблем, деструктор ~DynamicClass() сделан защищённым, а вместо него следует вызывать метод DynamicClass::Destroy(). Это метод гарантирует, что память выделяется и освобождается из одной и той же кучи.


При этом

сlass DynamicClass
{
public:
  void Destroy() throw() { delete this; }
  ...
protected:
  virtual ~DynamicClass() throw() {;; }
};


Но ведь реализация такого метода Destroy() будет в коде основной программы, оттуда он вызывается и вызов delete будет происходит тоже из нее, то есть как если бы мы прямо использовали delete plugin в коде основной программы.
Мне кажется должно быть так:

сlass DynamicClass
{
public:
  virtual void Destroy() = 0;
  ...
};

сlass MyPlugin : public DynamicClass
{
public:
  virtual void Destroy() { delete this; }
  ...
};


Если я не прав, то поясните подробнее пожалуйста.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.