我有以下代码:
struct Message
{
explicit Message(const std::string& message) : selfMessage(message) {};
~Message() { std::cerr << "Message: " << selfMessage << std::endl; }
const std::string selfMessage;
};
struct Foo
{
Foo() : fooMessage("Foo") {}
/// Destructor here is left intentionally non-virtual !!!
~Foo() { std::cerr << "~Foo" << std::endl; }
Message fooMessage;
};
struct Bar : Foo
{
Bar() : barMessage("Bar") {}
~Bar() { std::cerr << "~Bar" << std::endl; }
Message barMessage;
};
int main()
{
std::auto_ptr<Foo> foo(new Bar);
}
我期望以下输出:
Message: Bar
Message: Foo
~Foo()
但实际上(代码是用 编译的gcc
)Message: Bar
据我所知barMessage
没有被正确破坏。为什么?
AFAIK 非虚拟 d-tor 仅影响派生类的 dtor 调用 - 它永远不会被调用,但是派生类的堆栈分配成员呢?
谢谢,
PS我已经知道不推荐使用的std::auto_ptr<>()
用法:)