【发布时间】:2019-02-08 01:32:26
【问题描述】:
#include <iostream>
#include <vector>
using namespace std;
#define l(x) cout << (#x) << " : " << x << endl;
#define forf(x, fromY, Step, toZ) for(double x = fromY; x <= toZ; x+=Step)
class Particle {
public:
Particle() {
totalYield = winRate = 0;
}
~Particle() {
//cout << " Particle destructor were called";
args.~vector();
}
Particle(double* inputArgs, int nSize)
:args(nSize)
{
for (int i = 0; i < nSize; i++) {
args[i] = inputArgs[i];
}
totalYield = winRate = 0;
}
double GetAt(int i = 0) {
return args[i];
}
protected:
double winRate, totalYield;
unsigned int winCount, totalCount;
vector<double> args;
};
你好, 我从教科书中了解到,使用动态分配后必须释放所有内存。
据我所知,析构函数默认调用它的成员的析构函数(没有任何命令)
- 我的第一个问题是如果我使用动态分配的 类中的数组,我应该在析构函数中释放它们吗?。它是 不清楚,因为解构器自然将其称为成员 析构函数作为默认值。这个执行是否释放了 动态分配内存?
- 我的第二个问题是:我应该调用成员向量的吗? 类的析构函数中的析构函数?(参见 args.~vector(); // 我应该这样做吗?是这样吗?)
【问题讨论】:
-
你的类中没有任何东西是显式动态分配的(
vector与动态分配的数组不同;它是一个类似数组的自我管理的东西,所以它会自行清理)。这里没有什么可破坏的;默认的析构函数就可以了。 -
deconstructor -- 这个词是destructor,而不是deconstructor。
-
我应该在类的析构函数中调用成员向量的析构函数吗? -- 你不仅应该不在析构函数中这样做,而且你不应该这样做这个在任何地方,除非你使用
placement-new。 -
不要尝试手动调用析构函数
-
@ShadowRanger 谢谢!你的意思是我不必调用向量的解构器吗?然后Particle类会自动调用~vector吗?
标签: c++ dynamic-memory-allocation