pet*_*rpi 8 c++ const move-semantics c++11
假设我有一个类Foo,它有一个指向Bar的私有指针:
class Foo
{
private:
Bar * bar;
public:
Foo () : bar (new Bar ())
{}
~Foo ()
{
delete bar;
}
};
Run Code Online (Sandbox Code Playgroud)
如果指针bar永远不会被重新分配给不同的实例,那么const为了阻止我(或维护者)在将来这样做而使指针本身是有意义的:
private:
Bar * const bar;
Run Code Online (Sandbox Code Playgroud)
我喜欢在机会出现的地方这样做.
如果我想编写一个移动构造函数,它看起来像这样:
Foo (Foo && f) :
bar (f.bar)
{
f.bar = NULL; // uh oh; f.bar is const.
}
Run Code Online (Sandbox Code Playgroud)
我可以通过抛弃const f.bar或者首先不使const成为"使错误消失" .这些都不是我想要做的事情.我宁愿不完全删除const因为它是有原因的.另一方面,扔掉constness ring为我敲响了警钟,这是我从未经常做过的事情.我的问题是:在这样的移动构造函数中抛弃const是否被认为是可以接受的做法?有没有更好的方式我没有考虑过?
我不认为我的问题与此问题相同:使用const_cast实现移动构造函数
如果在某些情况下你必须更改指针(即使它只是一个案例),那么它可能不应该const.
但是,即使把这个想法放在一边,使用const_cast从对象中删除constness,然后使用转换的结果调用未定义的行为.对于const_cast最初不是const的变量,它是安全的.