具有共同联系的非POD对象:应该发生什么?

时间:2013-01-22 18:11:10

标签: c++

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

std::auto_ptr<ClassWithDestructor> an_auto_ptr;

他们意味着添加static但忽略了它。

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

这个项目的auto_ptr::~auto_ptr跑了两次,造成了不幸的后果。

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

1 个答案:

答案 0 :(得分:1)

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