Уничтожение объекта в функции-члене 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
Я хочу сохранить объект, так как он всегда будет храниться в другой структуре данных, которую я правильно освобождаю в конце программы.