相关疑难解决方法(0)

移动构造函数是自动生成的吗?

我有一个大班,拿着很多STL容器.
编译器会自动创建一个移动构造函数来将这些容器移动到目标,还是我必须自己创建?

c++ move-constructor c++11

32
推荐指数
1
解决办法
8750
查看次数

在移动构造函数中抛弃constness是否可以接受?

假设我有一个类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实现移动构造函数

c++ const move-semantics c++11

8
推荐指数
1
解决办法
372
查看次数

标签 统计

c++ ×2

c++11 ×2

const ×1

move-constructor ×1

move-semantics ×1