【发布时间】:2011-09-30 08:28:44
【问题描述】:
可能重复:
C++ basic constructors/vectors problem (1 constructor, 2 destructors)
我有代码:
#include <iostream>
class A
{
public:
A() { std::cout<<"A::A"<<std::endl; }
~A() { std::cout<<"A::~A"<<std::endl; }
};
class B : public A
{
public:
B(){ std::cout<<"B::B"<<std::endl; }
~B(){ std::cout<<"B::B"<<std::endl; }
};
void Func( A a ){}
int main()
{
B b;
Func(b);
}
在 VS2010EE 中输出将是:
A::A
B::B
A::~A //why twice? Once on gcc!
A::~A
B::~B
A::~A
但是,当我们有复制构造函数时,输出是:
A::A
B::B
A::A(copy)
A::~A
B::~B
A::~A
【问题讨论】:
-
你总是有一个副本 cosnstructor。如果你自己没有声明一个,而是隐式使用它,编译器会为你定义一个,而提供的编译器不会记录到
std::cout。 -
~B应该打印"B::~B",而不是"B::B"。 -
如果你在 A 析构函数中设置了一个断点,你应该看到它是从哪里被调用的。
-
@CharlesBailey:谢谢,这经常弹出,但我找不到重复的:/
-
@CharlesBailey :不确定是不是骗子:为什么 A 析构函数被调用 3 次?我可以理解两个(一个用于临时 A 参数,一个用于原始对象......)
标签: c++ visual-studio gcc