下午好。
我刚刚开始使用 opencv 库,它提出了一个问题:
声明 Mat 指针还是对象本身更好?即:
Mat* a = new Mat();
或者
Mat a = Mat();
乍一看,在堆上分配内存似乎更合理,因为对象通常比较大,在工作过程中我们可以增加矩阵的大小,并且存在堆栈溢出的威胁。
另一方面,在我看到的那些代码示例中,在任何地方都没有使用运算符new,我发现了以下语句:
当您使用它(Mat 类)时,您可以从内存管理的烦恼中解脱出来:分配和释放。该类实现了一个引用计数器,并且仅在不再需要时才释放内存。
您编写的那些大量数据,Mat 已经在堆本身上分配。它实现了管理此内存的逻辑,包括使用引用计数进行复制。因此无需担心堆栈溢出。如果您不需要动态创建,请随意在堆栈上创建。