我在使用std :: list <std :: string>时偶然发现Stack Overflow问题内存泄漏与std :: string,其中一条评论说:
停止使用
new这么多.我看不出你在任何地方使用新的任何理由.您可以使用C++中的值创建对象,这是使用该语言的巨大优势之一.您不必在堆上分配所有内容.不要像Java程序员那样思考.
我不太确定他的意思是什么.为什么要尽可能经常地用C++中的值创建对象,它在内部有什么区别?我误解了答案吗?
我使用的是borland 2006 c ++,并且有以下代码.我正在使用向量,并且无法理解为什么没有调用析构函数.
基本上我有A级
class A
{
private:
TObjectList* list;
int myid;
public:
__fastcall A(int);
__fastcall ~A();
};
__fastcall A::A(int num)
{
myid = num;
list = new TObjectList();
}
__fastcall A::~A()
{
delete list;
}
int main(int argc, char* argv[])
{
myfunc();
return 0;
}
void myfunc()
{
vector<A*> vec;
vec.push_back(new A(1));
vec.push_back(new A(2));
}
Run Code Online (Sandbox Code Playgroud)
根据我读到的,当变量vec超出myfunc()中的范围时,它应该破坏其包含的元素,因此应该调用A的析构函数.我在~A()处有一个断点,但从未被调用过,我也尝试过resize(),擦除方法
TIA