我的问题是分配的对象会发生什么new
函数调用内部的运算符。
一个具体的例子:我有一个私有向量pV
我想将其发送到类之外的对象/函数,foo->func(std::vector<int> *vec)
。我首先尝试写
foo->func( new std::vector<int>(pV) )
但这导致了内存泄漏(当在循环内重复调用该函数时)。当我专门创建一个新对象,调用该函数,然后删除该对象时,整个过程正常进行,没有内存泄漏。
当函数返回时,新创建的对象不应该“过期”并被删除吗?如果不是,我应该如何从被调用函数内部删除该对象?哪种方法更好?
C++ 中不存在新对象“过期”这样的事情:它不是垃圾收集或引用计数语言,因此您需要手动编码分配的对象的所有内存管理new
or new[]
.
在这种特殊情况下,您可以使用unique_ptr
确保自动删除:
for (int i = 0 ; i != 10000 ; i++) {
std::unique_ptr<std::vector<int> > tmp = new std::vector<int>(pV);
foo->func(tmp);
}
这里没有魔法,尽管看起来并不存在delete
: 调用delete
内部显式编码unique_ptr
,因此出于所有实际目的,它仍然是手动的。
更好的解决方案是在自动存储中分配向量,并将指针传递给foo->func
:
for (int i = 0 ; i != 10000 ; i++) {
std::vector<int> tmp(pV);
foo->func(&tmp);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)