2013-11-02 2 views
5

Я отлаживаю программу. Мне нужно знать, вызван ли конструктор копирования для некоторого класса. Поскольку я не определил конструктор копирования, он сгенерировал его. Я попытался определить его и поставить там cout, но теперь я должен вручную написать копию. Класс огромен, поэтому я не хочу этого делать. Есть ли способ проверить, вызван ли конструктор копирования, но не записывать копирование его членов. Как я могу вызвать реализацию конструктора копирования по умолчанию?Проверьте, вызван ли конструктор копирования

+1

насчет проверки стека вызовов? – elyashiv

ответ

7

Вы можете использовать подмешать:

template<class D> 
struct traced 
{ 
public: 
    traced() = default; 
    traced(traced const&) { std::cout << typeid(D).name() << " copy ctor\n"; } 

protected: 
    ~traced() = default; 
}; 

И тогда вы просто наследовать от класса, как так:

class my_class : public traced<my_class> 
{ 
    // usual stuff... 
}; 
Смежные вопросы