c++ - 从 cv::Mat 继承,一个好主意?

标签 c++ class opencv inheritance

我想用一些功能扩展 cv::Mat 类(如序列化、获取数据指针的所有权、颜色排序 (rgb/bgr/...))。

一种可能性是创建一个新类(比如 CustomMat),其中包含一个 cv::Mat 作为成员:

class CustomMat {
  int width() { return m_mat.size().width; }
  int height() { return m_mat.size().height; }
  ...
  cv::Mat getMat() { return m_mat; }
  private:
  cv::Mat m_mat;
}

但是,我必须转发所有构造函数和成员才能正确使用外部类。或者我必须使用类似 customMat.getMat().size().width 的东西,这也不是很好。

另一种方法是直接从 cv::Mat 继承:

class CustomMat : public cv::Mat {
...
}

对于像 cv::Mat 这样的复杂类,这对我来说似乎有点可疑。您看到任何缺点了吗?或者这很好吗?

最佳答案

我看到了继承方法的缺点。 cv::Mat 没有虚拟析构函数。这意味着,您在为 CustomMat 使用多态行为时可能会遇到麻烦。看看下面的例子。

cv::Mat* foo = new CustomMat;
delete foo;

在上述情况下,永远不会调用 CustomMat 的析构函数。

关于c++ - 从 cv::Mat 继承,一个好主意?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24929385/

相关文章:

c++ - 将 opencv 处理添加到 gstreamer 应用程序

c++ - C/C++ 静态 Voodoo

swift - NSArrayController 排序 : "this class is not key value coding-compliant for the key"

android - 去掉大圆opencv android中的小圆

c++ - 无法使 Flandmarks 工作,C++,错误 LNK2019,未解析的外部符号

actionscript-3 - AS3中的突破游戏错误#2007

c++ - 模板的编译是如何工作的?

c++ - 如何在 C++ 中转发声明 std::set?

c++ - OpenCV cvCaptureFromCAM 返回零

ruby - 如何在目录中自动创建每个类的实例?