社区维基,因为这几乎可以肯定将调用UB。
如果你有一个拷贝构造函数,你可以使用新的布局使得赋值运算符:
struct Transaction {
Transaction(Book& bb, Patron& pp, Date dd)
: b(bb), p(pp), d(dd) { }
Transaction(const Transaction & src)
: b(src.b), p(src.p), d(src.d) { }
Transaction & operator= (const Transaction & src) {
if (this != &src) {
this->~Transaction();
Foo * copy = new (this) Transaction(src);
return *copy;
} else {
return *this;
}
}
Book& b;
Patron& p
Date d;
};
这可能与您的计算机的工作,你的编译器,具有特定的优化设置。然后,它可能不会。或者当您的操作员系统自动更新C++ ABI库时,它可能突然停止工作。或者,当您将它交付给客户时,它会突然停止工作,而客户的C++ ABI库的版本略有不同。
无论你如何切割它,更改引用都是未定义的行为。
您可以显示您用于将对象推入向量中的代码以及错误吗? – Jason
我使用v_t.push_back()。 – Robotron
引用引入到C++中以支持传递引用。他们从未打算被用作数据成员。尽管有一些*有效的用例,但使用指针作为数据成员而不是引用几乎总是更好。 – fredoverflow