编译以下代码会出现 "undefined reference to `A::~A()" 错误:
#include <cstdlib>
#include <memory>
template <typename T>
struct A {
A() {}
~A() {}
};
struct Aggregate {
using key_vector = A<char>;
using value_vector = A<int>;
value_vector vals;
key_vector keys;
};
int
main()
{
auto x = malloc(sizeof(Aggregate));
new (x) Aggregate{};
return 0;
}
问题出现在clang 7.0和6.0上(可能也存在于一些旧版本中),请参见:https://godbolt.org/z/GNPk3V。
在较新的clang版本和gcc上它能够正常工作。
这是预期的吗?还是clang中的某种错误?
((Aggregate*)x)->~Aggregate();
。不要问我为什么它们中的任何一个起作用。 - chris= default
来定义析构函数。或者直接删除它,因为它是空的。我不知道为什么会出现这种情况,但在调用析构函数并删除内存的实际代码中不应该发生这种情况。 - DeiDei