【发布时间】:2017-05-01 05:57:45
【问题描述】:
本质上,如果我创建一个新类的多个实例,我是否需要为每个实例调用析构函数,或者在销毁每个实例后调用它(如果我使用模糊/错误的术语,构造函数/析构函数,我深表歉意是我还没有完全掌握的概念)。
更具体地说,这是我正在使用的一些代码(如果样式不好,我将不得不再次道歉,我有一个关于学校问题的想法,并希望尽快得到代码)。
while(read >> f >> l >> t >> s >> sta >> acct >> bal)
{
cout << "test" << endl;
ptr[i] = new account(f,l,t,s,sta,acct,bal);
ptr[i]->printcontents();
cout << "test" << endl;
i++;
cout << i << endl;
}
因此,为了这个问题,假设这将循环 3 次。我是否只需要调用一次“帐户”的析构函数来销毁所有三个新帐户实例,还是一个调用会留下另外两个?这甚至是一个好习惯吗?
编辑:我注意到我的一些帖子被截断了,所以我添加了最后几行,但人们已经解决了这个问题。我是用户指针的原因纯粹是因为任务要求我这样做;坦率地说,我现在没有看到使用它们的意义,但我认为它们会在某个地方变得有用。我还应该补充一点,动态内存分配也应该在分配中使用。
【问题讨论】:
-
使用智能指针(即
shared_ptr/make_shared或unique_ptr/make_unique),不要担心删除您的newed 实例。 -
一如既往:每个
new都需要一个delete,每个new[]恰好需要一个delete[]。但是,您基本上从不需要new和new[]开始的频率更低。 -
真正的问题是为什么要使用指针开始。您来自 Java,所有对象都是用
new创建的吗?您的account对象数组可以只存储实际的account对象。 -
您不会在 C++ 中调用析构函数(除非在极少数情况下,如果有的话,您将很长时间不会遇到)。
delete和delete[]这样做是他们操作的一部分,自动对象的销毁也是如此。
标签: c++ pointers constructor destructor