Why does my destructor appear to be called more often than the constructor?

后端 未结 3 651
失恋的感觉
失恋的感觉 2020-12-11 16:02
#include
using namespace std;

class A{
public:
    static int cnt;
    A()
    { 
        ++cnt; 
        cout<<\"constructor:\"<

        
相关标签:
3条回答
  • 2020-12-11 16:20

    You need to add a copy constructor that increases the counter.

    A(const A&)
    { 
        ++cnt; 
        cout<<"copy constructor:"<<cnt<<endl;
    }
    

    If you don't add it explicitly, the compiler generates one that does nothing with the counter cnt.

    This expression

    A a1 = f(a0);
    

    is creating copies of a0, which make use of the copy constructor. The exact number of copies may vary depending on copy elision, but your cnt should be 0 at the end of the program.

    Note: In C++11, you should also consider the possibility of a compiler generated move copy constructor, however, once you declare your own copy constructor, the compiler no longer generates the move version.

    0 讨论(0)
  • 2020-12-11 16:37

    You need to count copy constructor calls as well. In C++11 there are also move constructors that need to be taken into account.

    0 讨论(0)
  • 2020-12-11 16:38

    You are not tracking all constructors, only the default constructor. The compiler has generated a copy constructor and used it a couple of times, accounting for the 2 objects that are listed as destroyed and not as created.

    0 讨论(0)
提交回复
热议问题