我仍然对std::vector
在 C++11 中与 a 一起使用的类型的要求感到困惑,但这可能是由错误的编译器(gcc 4.7.0)引起的。这段代码:
struct A {
A() : X(0) { std::cerr<<" A::A(); this="<<this<<'\n'; }
int X;
};
int main()
{
std::vector<A> a;
a.resize(4);
}
工作正常并产生预期的输出,表明调用了默认 ctor(显式给出)(而不是隐式复制 ctor)。但是,如果我向班级添加已删除的副本 ctor,即
struct A {
A() : X(0) { std::cerr<<" A::A(); this="<<this<<'\n'; }
A(A const&) = delete;
int X;
};
gcc 4.7.0 不会编译,但会尝试使用已删除的 ctor。这是正确的行为还是错误?如果是前者,如何让代码工作?