具有公共链接的非 POD 对象:应该发生什么?

Non-POD object with common linkage: what's supposed to happen?

本文关键字:什么 对象 POD 链接      更新时间:2023-10-16

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

std::auto_ptr<ClassWithDestructor> an_auto_ptr;

他们本想增加static但忽略了它。

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

该项目的auto_ptr::~auto_ptr进行了两次,造成了不幸的后果。

这是定义的行为

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

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

相关文章: