Why have move semantics?

后端 未结 4 782
鱼传尺愫
鱼传尺愫 2021-02-12 19:24

Let me preface by saying that I have read some of the many questions already asked regarding move semantics. This question is not about how to use move semantics, it is asking w

4条回答
  •  天涯浪人
    2021-02-12 19:43

    Can't the client already take advantage of pointers to do everything move semantics gives us? If so, then what is the purpose of move semantics?

    Your second example gives one very good reason why move semantics is a good thing:

    std::string *f()
    {
        std::string *s = new std::string("some long string");
        return s;
    }
    
    int main()
    {
        // still super-fast pointer swap!
        std::string *a = f();
        delete a;
        return 0;
    }
    

    Here, the client has to examine the implementation to figure out who is responsible for deleting the pointer. With move semantics, this ownership issue won't even come up.

    If an exception might be thrown before delete a is called, that's still not a real problem just make a guard or use unique_ptr.

    Again, the ugly ownership issue shows up if you don't use move semantics. By the way, how would you implement unique_ptr without move semantics?

    I know about auto_ptr and there are good reasons why it is now deprecated.

    is it really worth all the trouble with the double ampersands?

    True, it takes some time to get used to it. After you are familiar and comfortable with it, you will be wondering how you could live without move semantics.

提交回复
热议问题