1

这里有人在文件范围内写了以下内容:

std::auto_ptr<ClassWithDestructor> an_auto_ptr;

他们打算添加static但忽略了它。

然后,两个不同的 linux 共享库,每个都包含包含此声明的 .o,最终链接到一个可执行文件。

auto_ptr::~auto_ptr项目运行了两次,结果很不幸。

这是已定义的行为、未定义的行为还是 gcc+ld 错误?

4

1 回答 1

1

这个声明也是一个定义。程序中的同一个对象有两个定义。这违反了一个定义规则,因此违反了未定义的行为。

于 2013-01-22T19:35:09.550 回答