【发布时间】:2021-05-05 00:09:33
【问题描述】:
鉴于下一个剪辑:
vector<cv::Mat> list; // Hold the pointer values (not the pointers)
for (int index = 0; index < item_count; index++)
{
jobject bitmap = env->GetObjectArrayElement(listBitmaps, index);
// BitmapUtils::toMat returns a cv::Mat* which has been created with "new cv::Mat()"
cv::Mat* mat = BitmapUtils::toMat(bitmap);
list.push_back(*mat); // Store the object value
}
下一步是删除向量对象指针的正确方法吗?
for (auto entry : sources)
{
delete & entry;
}
请注意,我不能使用指针向量,例如 vector<:mat>。
【问题讨论】:
-
什么是
sources?我在您的代码中看不到new。你为什么要delete什么的?不要delete未分配new的内存。 -
@AtahanAtay 将自动对象的地址传递给
delete永远不会正确。 -
“请注意,我不能使用诸如vector<:mat>之类的指针向量。” 为什么不呢?
list.push_back(*mat);将mat指向的对象的副本推送到列表中。你不能delete它。将副本推送到list后,也许您想deletemat。 -
sources向量中的内容无关紧要。它可以是任何东西的向量,并且显示的delete实际上保证是完全错误的,并且由于至少两个独立的独立原因导致几乎可以保证的崩溃(entry在自动范围内,向量成员是不是单独newed,即使他们是删除它的矢量作业,所以实际上有三个原因。 -
如果您需要删除任何内容,请联系
mat。该向量将包含副本,并将管理它自己的内存。