c++ - 基类 'class std::vector<...>' 有一个非虚析构函数

标签 c++ vector stl virtual-destructor

我的一个 C++ 类派生自 std::vector,因此它可以充当容器,也可以对其内容执行自定义操作。不幸的是,编译器提示析构函数不是虚拟的,我无法更改,因为它在标准库中。

我是不是做错了整件事(你不应该从 STL 派生)或者我可以做些什么来让编译器满意? (停止使用 -Weffc++ :)

编辑:派生类不涉及 vector 操作算法,而只是添加一些信息,例如图像 vector 的“元素宽度/高度”。例如,您可以想到

class PhotoAlbum: public std::vector<Photo> {
    String title;
    Date from_time, to_time;
    // accessors for title and dates
    void renderCover(Drawable &surface);
};

您将相册主要视为具有一些元数据(标题和时间)和特定于相册的功能(例如将某些照片的缩略图渲染到表面上以制作相册封面)的图片集合。所以恕我直言,相册是 Photo 的集合,而不是 HAS-这样的集合。

我没有看到在 PhotoAlbum 中使用 getPhotoVector() 方法可以获得任何好处,因为它会有一个额外的“集合”字段。

最佳答案

为什么不使用组合?只需使 std::vector 成为自定义容器的成员,然后将自定义操作实现为作用于 std::vector 成员的所述类的成员函数。这样,您就可以完全控制它。此外,you should prefer composition over inheritance如果不需要继承。

关于c++ - 基类 'class std::vector<...>' 有一个非虚析构函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3601431/

相关文章:

c++ - 适用于 C/C++ 的类似 ReSharper/StyleCop 的 Visual Studio 插件

c++ - 具有跨 DLL/SO 使用的静态数据成员的模板类

c++ - 如何在 vector 中找到第一个小于整数 X 的元素? (c++)

c++ - 有没有更快的方法从无序集合中删除和存储元素

c++ - 来自 std::unique_ptr 的 STL 容器的 find() 线程安全

c++ - 调整多维 vector 的大小

c++ - 不完整的类型和 initializer_list

c++ - 如何找到数组的长度?

matlab - 如何自动创建变量,这些变量是从矩阵中提取的列

c++ - 读取访问冲突,这是 nullptr 错误,未正确初始化?