这里有人在文件范围内写了以下内容:
std::auto_ptr<ClassWithDestructor> an_auto_ptr;
他们意味着添加static
但忽略了它。
然后,两个不同的linux共享库,每个包含包含此声明的.o,最终链接到可执行文件。
这个项目的auto_ptr::~auto_ptr
跑了两次,造成了不幸的后果。
这是定义的行为,未定义的行为还是gcc + ld错误?
答案 0 :(得分:1)
该声明也是一个定义。对程序中的同一对象有两个定义。这违反了一个定义规则,因而违反了未定义的行为。