Уничтожение объекта в функции-члене C++

class Base{
  virtual void sth() =0;
  virtual void destroy_me(){}
};

class Derived : public Base{
  void sth(){}
  void destroy_me(){
    delete this;
  }
};

Это безопасное поведение, если я абсолютно уверен, что Derived был динамически распределен? Я не хочу использовать деструктор, поскольку некоторые производные классы в моем проекте не должны разрушать себя, в то время как другие, например,

class Safe : public Base{
  void sth(){};
  void destroy_me(){return;}
}

Классы типа Safe должны быть освобождены "надлежащим" путем вызова delete,

РЕДАКТИРОВАТЬ: Чтобы дать больше информации, почему я делаю это. У меня есть двоичная древовидная структура типа

class Node{
  private:
    Node* lhs;
    Node* rhs;
  public:
    Base* compute();   // recursive
};

Идея в том, что я использую Derived для некоторых временных вычислений в то время как Safe является объектом, хранящимся в правильной структуре данных. Если compute() возвращает указатель на Derived Я хотел бы удалить его, если он возвращает указатель на SafeЯ хочу сохранить объект, так как он всегда будет храниться в другой структуре данных, которую я правильно освобождаю в конце программы.

0 ответов

Другие вопросы по тегам