#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
- это не то же самое, что динамически выделяемый массив; это самоуправляемая вещь, подобная массиву, поэтому она очищается после себя). Здесь нечего разрушать; деструктор по умолчанию подойдет. - person ShadowRanger   schedule 03.09.2018placement-new
. - person PaulMcKenzie   schedule 03.09.2018