2013-11-02 15 views
5

Tôi đang gỡ lỗi chương trình hay không. Tôi cần phải biết nếu constructor sao chép được gọi cho một số lớp. Vì tôi chưa định nghĩa constructor sao chép nên trình biên dịch đã tạo ra nó. Tôi đã cố gắng để xác định nó và đặt một số cout có nhưng bây giờ tôi phải viết phần sao chép bằng tay. Lớp học rất lớn nên tôi không muốn làm điều đó. Có cách nào để kiểm tra xem nhà xây dựng bản sao có được gọi hay không nhưng tránh viết bản sao của các thành viên của nó. Làm thế nào tôi có thể gọi thực hiện mặc định của constructor sao chép?Kiểm tra xem hàm tạo bản sao có được gọi là

+1

gì về việc kiểm tra các cuộc gọi stack? – elyashiv

Trả lời

7

Bạn có thể sử dụng một mixin:

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

protected: 
    ~traced() = default; 
}; 

Và sau đó bạn chỉ kế thừa từ các lớp như sau:

class my_class : public traced<my_class> 
{ 
    // usual stuff... 
}; 
Các vấn đề liên quan