这是对我之前关于类(Is there an elegant way to swap references in C++?)中引用的问题的跟进。这种方法因不正当使用联合而受到一些批评,其代码不可移植。这次我修改了方法,以使代码更具可移植性。为了简单起见,我现在将说明引用的分配,而不是交换引用。中心思想是使用placement new运算符重新分配引用:
struct A
{
int& r_;
public:
A(int& v) : r_(v) {}
int& get() { return r_; }
void operator=(const A& a)
{
new(this)A(a.r_);
}
};
如果一个类需要包含的不仅仅是引用作为成员变量,那么所有引用都可以使用相应的赋值运算符分组在基类中。完整的示例可以在这里找到:https://ideone.com/bGcdxP。您如何看待这种方法?是否有任何阻碍其在生产代码中使用的缺点?