假设我希望能够为类Foo
的对象进行内存布局优化:
class Foo
{
T1 m_x;
T2 m_y;
};
现在,T1:s必须始终具有对T2:s的有效引用,因此迫使我首先初始化T2。但这是不可能的,因为m_x
是第一位的。我可以为T1创建一个默认构造函数,但是可以让m_x
处于僵尸状态。还有其他选择吗?
在这种情况下,T1表示T2的视图。也就是说,之后可以更改T2,但我希望T2始终引用有效对象:
class T1
{
public:
explicit T1(const T2& obj):r_obj(&obj){}
explicit T1(T2&& obj)=delete; //Don't ever pass a temporary object here...
void set(const T2& obj) noexcept //Replace the view
{r_obj=&obj;}
void set(T2&& obj)=delete; //Again, temporaries are forbidden
void doStuffThatRequiresObjToBeNonNull();
private:
const T2* r_obj;
};