类实体{ 上市: int a; 实体(int t) :在) { std :: cout<< “构造函数!” <<的std :: ENDL; } 〜实体() { std :: cout<< “破坏者!……
你的“复制了!”输出中的行来自复制构造函数,因此您创建了三个对象,而不仅仅是两个(然后您正在按预期方式销毁所有三个对象)。
请注意,复制构造函数通常应该使用其参数 const 参考。猜测,您可能正在使用Microsoft的C ++编译器,它将临时绑定到非const引用。
const
另请注意,如果启用优化,您可能希望只看到两个构造函数和两个析构函数,而不会发生复制构造。使用足够新的(C ++ 17)编译器,即使您没有启用优化也应该会发生这种情况(复制省略已成为必需)。
这是一个微不足道的问题
的 任何人都可以解释三个析构函数的原因吗? 强>
你打电话的时候
o=hi();
调用你的函数,它创建一个Entity类型的对象,它反过来调用构造函数。 这是您获得一个额外的构造函数消息的地方
替换你的 Entity(int t) contructor by this
Entity(int t) contructor by this
Entity(int t) :a(t) { std::cout << "Constructor created with integer "<< a << std::endl; }
您将看到在运行代码时调用了哪些构造函数。