Cha*_*one 5 c++ constructor pointers destructor
本质上,如果我创建一个新类的多个实例,我是否需要为每个实例调用析构函数,或者一旦销毁每个实例就调用它(如果我使用含糊/错误的术语,我道歉,构造函数/析构函数是概念我还没完全掌握).
更具体地说,这是我正在使用的一些代码(如果样式不好,我将不得不再次道歉,我对学校问题有了一个想法,并希望快速得到代码).
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;
}
Run Code Online (Sandbox Code Playgroud)
所以为了这个问题,假设这个循环三次.我是否只需要调用"帐户"的析构函数来销毁所有三个新帐户实例,或者一个调用会离开另外两个?这甚至是一个好习惯吗?
编辑:我注意到我的一些帖子被切断,所以我添加了最后几行,但人们已经解决了这个问题.我是用户指针的原因纯粹是因为作业决定了我这样做; 坦率地说,我现在没有看到使用它们的重点,但我认为它们在某个地方变得有用.我还应该补充说,动态内存分配也应该在赋值中使用.
析构函数是自动调用的,除非你动态分配内存,否则通常不必担心它new.
在这种情况下,delete一旦不再需要,就必须调用每个已分配的内存.
请注意,如果要分配数组new [],则必须使用delete[]desallocation:
int *a = new int[10]; // allocating an array of 10 integers
//...
delete[] a; // release memory
Run Code Online (Sandbox Code Playgroud)
在现代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;
}
Run Code Online (Sandbox Code Playgroud)
在这里,std::make_unique将返回一个std::unique_ptr将在销毁时调用相关内存上的删除.
最后一点:你确定你真的需要指针吗?很难说你的例子,但根据你的用法,你也可以创建静态分配的对象:
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;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
384 次 |
| 最近记录: |