#include <iostream>
using namespace std;
class A
{
public:
A() { cout << "A's constructor" << endl; }
~A() { cout << "A's destructor" << endl; }
};
class B
{
public:
operator A() const { return A(); }
};
void f(A q) {}
int main()
{
B d1;
f(d1);
return 0;
}
Вот что я ожидал от кода, который должен был выполнить до того, как я его запустил: Вызов f приводит к вызову функции преобразователя в классе B, которая возвращает временный объект. Создается конструктор q, и когда f выходит, деструктор q вызывается. Я ожидал, что следующий вывод:Почему деструктор называется дважды?
конструктор в
деструктор A в
но выход я получил:
конструктор в
деструктор A в
деструктор A в
С есть еще один деструктор, должен быть создан дополнительный объект, поэтому mewhere. Может кто-нибудь объяснить, что здесь происходит?
Поскольку вы делаете много копий-конструирования, вам также нужно отслеживать вызовы конструктора-копии. Почему ты этого не делаешь? Фактически, вы создаете так много копий, что наблюдение только двух объектов, несомненно, является следствием оптимизации. Технически вы должны иметь по крайней мере четыре, если не пять. – AnT