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

后端 未结 3 674
失恋的感觉
失恋的感觉 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:"<

    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.

提交回复
热议问题