继承的类析构函数
Inherited class destructor
我有一个这样的模板类(带有动态数据(:
template <class T>
class TemplateClass : public BaseClass {
public:
...
protected:
vector<T> data;
...
}
它派生自 BaseClass,因为在另一个容器类中,我必须在同一向量中拥有所有这些模板类:
class Container{
public:
...
protected:
vector<BaseClass*> elements;
}
这样,我可以在同一向量中使用不同的类型,并调用 TemplateClass 方法只是执行dynamic_cast(例如dynamic_cast<TemplateClass<int>*>(elements[i])->method(a)
("a"将是一个整数((。 它可以工作(程序运行(,但它不能说服我,因为当我销毁容器时,我必须显式调用 TemplateClass 的析构函数,因为 BaseClass 不会破坏数据(向量(:delete dynamic_cast<TemplateClass<int>*>(elements[i])
我想使用unique_pointer但我认为它不起作用,因为它不会删除数据(因为将调用 BaseClass 析构函数而不是 TemplateClass 析构函数,并且 BaseClass 不能有这个模板向量(。 还有其他选择吗?我必须有这个模板类向量。 谢谢
你需要使BaseClass
的析构函数成为virtual
析构函数。
class BaseClass
{
virtual ~BaseClass() {}
};
通过该更改,当您delete
中的对象时,将调用TemplateClass
的析构函数Container::elements
。在TemplateClass
的析构函数中,您可以delete
动态分配的内存。
相关文章:
- C++ std::vector 中的虚拟析构函数继承
- 继承的类析构函数
- 抽象类析构函数与继承"Shutdown"函数
- C++虚拟继承、虚拟析构函数和 dynamic_cast<void*>
- 如果不手动完成,子类是否继承父类的析构函数?
- 从 std::streambif 继承时不兼容析构函数编译器警告
- 多重继承析构函数调用他自己和父析构函数?c++
- 为什么我在使用组合而不是继承时得到 C4624(无法访问基类析构函数)
- 抽象基类中的析构函数保护不会在 C++ 中继承
- C++继承和构造函数、析构函数
- 从 STL 容器继承并删除"新"运算符以防止由于缺少虚拟析构函数而导致未定义的行为是否有意义?
- 虚拟继承中的析构函数
- 复制、移动、交换、赋值和析构函数的C++继承?我需要哪个
- 在不使用虚拟析构函数的情况下删除继承的对象时中止
- C++析构函数继承
- C++非抽象析构函数继承
- 构造函数和析构函数继承
- C++析构函数-继承上下文中的显式调用
- 非虚拟平凡析构函数 + 继承
- C++构造函数/析构函数继承