Мне трудно понять, почему (кажется, что) объект разрушается дважды.
Если я создаю объект класса (B), который содержит объект другого класса (A) ия копирую этот объект.скопированный объект уничтожается дважды.Хотя это выглядит так.Я не могу понять этот вывод.
Я создал следующий (минимум?) Пример, который, кажется, вызывает мою проблему:
#include <stdio.h>
#include <stdint.h>
template <class T>
class A
{
public:
A()
{
myCtr = ++ctr;
printf("class A default Constructor - object id: %u\n", myCtr);
}
A(const A<T> &a2) {
myCtr = ++ctr;
printf("class A copy constructor - object id: %u\n", myCtr);
}
~A()
{
printf("class A destructor - object id: %u\n", myCtr);
}
void add(T item) {
/* Irrelevant */
}
private:
uint64_t myCtr;
static uint64_t ctr;
};
class B
{
public:
B() {
}
B(char * input, uint32_t len) {
for (uint32_t i = 0; i < len; i++)
{
characters.add(input[i]);
}
}
B(const B &b2) {
characters = A<char>(b2.characters);
}
~B() {
}
private:
A<char> characters;
};
template <class T>
uint64_t A<T>::ctr = 0;
int main(int argc, char *argv[]) {
B b1 = B((char *)"b1", 2);
B b2 = B(b1);
return 0;
}
Это приводит к следующему выводу:
class A default Constructor - object id: 1
class A default Constructor - object id: 2
class A copy constructor - object id: 3
class A destructor - object id: 3
class A destructor - object id: 3
class A destructor - object id: 1
объектный идентификатор 3 уничтожается дважды, а объектный идентификатор 2 вообще не уничтожается.
Я использую следующий компилятор: Microsoft (R) C / C ++ Оптимизирующая версия компилятора 19.14.26429.4
На случай, если вы проголосуете.Пожалуйста, укажите почему.Я с радостью постараюсь улучшить свой вопрос.