#include <iostream>
#include <string>
using namespace std;
class BaseCl {
protected:
int index;
public:
};
class b : public BaseCl {
private:
string* str;
public:
b() {
str = nullptr;
}
~b() {
cout << str << endl;
}
void setb(int i) {
this->index = i;
str = new string[2];
str[0] = "str0 index of b object " + to_string(i);
str[1] = "str1 index of b object " + to_string(i);
}
};
class a {
private:
b* bObj;
int delete_counter = 0;
public:
a() {
bObj = nullptr;
}
a(int size) {
bObj = new b[size];
for (int i = 0; i < size; i++) {
bObj[i].setb(i);
}
delete_counter++;
}
~a() {
if (delete_counter > 0) {
delete[] bObj;
delete_counter--;
}
}
};
int main()
{
cout << "Hello World!\n";
a* aobj1;
aobj1 = new a;
aobj1[0] = a(2);
delete aobj1;
}
Прогонял сей код в отладчике. И не могу понять почему, когда у меня вызывается второй раз деструктор в классе а, то переменная delete_counter=1. Т.е. по окончанию работы деструктора класса а она становится равной нулю, однако при вызове деструктора второй раз она снова становится равной единице.
Подскажите, пожалуйста, в чем может быть причина, или что можно почитать на эту тему.