gpt4 book ai didi

c++ - 我需要销毁新类的每个实例吗?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:06:41 24 4
gpt4 key购买 nike

本质上,如果我创建一个新类的多个实例,我是否需要为每个实例调用析构函数,或者在销毁每个实例时调用它(如果我使用模糊/错误的术语,构造函数/析构函数,我深表歉意是我还没有完全掌握的概念)。

更具体地说,这是我正在使用的一些代码(如果样式不好,我将不得不再次道歉,我有一个学校问题的想法,想尽快把代码写下来)。

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;
}

所以为了这个问题,假设这将循环三次。我只需要调用一次“帐户”的析构函数来销毁新帐户的所有三个实例,还是一个调用会留下另外两个?这甚至是一种好的做法吗?

编辑:我注意到我的一些帖子被截断了,所以我添加了最后几行,但人们已经解决了这个问题。我是用户指针的原因纯粹是因为作业要求我这样做;坦率地说,我现在看不到使用它们的意义,但我认为它们会在某个地方变得有用。我还应该补充一点,动态内存分配也应该用于分配。

最佳答案

析构函数会自动调用,您通常不必担心它除非您使用new 动态分配内存。

在这种情况下,一旦您不再需要每个已分配的内存,就必须调用delete

请注意,如果您使用 new [] 分配数组,则必须使用 delete[] 来取消分配:

int *a = new int[10]; // allocating an array of 10 integers

//...

delete[] a; // release memory

在现代 C++ 中,您应该考虑可以为您完成这项工作的托管指针。像这样的东西:

while(read >> f >> l >> t >> s >> sta >> acct >> bal)
{
cout << "test" << endl;
ptr[i] = std::make_unique<account>(f,l,t,s,sta,acct,bal);
ptr[i]->printcontents();
cout << "test" << endl;
i++;
cout << i << endl;
}

在这里,std::make_unique 将返回 std::unique_ptr这将在销毁时调用关联内存上的 delete。


最后一点:你确定你真的需要指点吗?从你的例子很难说,但根据你的使用情况,你也可以创建静态分配的对象:

while(read >> f >> l >> t >> s >> sta >> acct >> bal)
{
cout << "test" << endl;
ptr[i] = account(f,l,t,s,sta,acct,bal);
ptr[i].printcontents();
cout << "test" << endl;
i++;
cout << i << endl;
}

关于c++ - 我需要销毁新类的每个实例吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41167423/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com