移动POD-ish类型的语义

3Da*_*ave 10 c++ move-semantics

是否有任何一点实现移动构造函数并为仅包含基本类型的结构或类移动赋值运算符?例如,

struct Foo
{
    float x;
    float y;
    float z;

    /// ... ctor, copy ctor, assignment overload, etc...


};
Run Code Online (Sandbox Code Playgroud)

我可以看到,如果我有更复杂的东西,比如:

struct Bar
{
    float x,y,z;
    std::string Name;
};  
Run Code Online (Sandbox Code Playgroud)

我宁愿移动而Name不是复制它,移动ctor会有意义.然而,"移动"浮动并不(语义上)对我有意义.

思考?

Jos*_*eld 6

即使您有该std::string成员,实现移动构造函数也没有意义.隐式移动构造函数已经移动了每个成员,在这种情况下float只会复制它,并且在std::string移动它的情况下.

当你的类正在进行一些自己的内存管理时,你应该只需要提供一个移动构造函数.也就是说,如果您在构造函数中分配内存,那么您将需要在移动期间将指针传输到分配的内存.见五法则.

如果您总是依赖智能指针来处理为您分配的内存,则可以完全避免这种情况.参见零度规则.

  • @JoselphMansfield 最后一个链接看起来很糟糕! (2认同)