Rule of Three in C++

后端 未结 3 1323
一生所求
一生所求 2020-12-07 03:43

I\'ve read that The Rule of Three, What is The Rule of Three? is summarized as follows:

If you need to explicitly declare either the destructor, copy

相关标签:
3条回答
  • 2020-12-07 04:15

    In almost all cases, the compiler will generate these methods for you and you don't need to do anything. But, if implicitly generated copy constructor/assignment operator won't do what you want, and design-wise your class makes sense to be able to be copied, you should explicitly provide a copy ctor and assignment operator whether you use them both or not (as good practice).

    If, design-wise, your class makes sense to be noncopyable, you can declare but not define the copy ctor/assignment op.

    0 讨论(0)
  • 2020-12-07 04:18

    I am absolutely certain that there is no usage in the application of a copy constructor, i.e., usage of the type Class c(..); Class d(c)

    Are you aware that the following code

    Foo c;
    Foo b = c;
    

    invokes the copy constructor and NOT the assignment operator? I'd implement the copy constructor just to be safe.

    0 讨论(0)
  • 2020-12-07 04:23

    If you know that the copy constructor won't be used, you can express that by making it private and unimplemented, thus:

    class C
    {
    private:
        C(const C&); // not implemented
    };
    

    (in C++11 you can use the new = delete syntax). That said, you should only do that if you're absolutely sure it will never be needed. Otherwise, you might be better off implementing it. It's important not to just leave it as is, as in that case the compiler will provide a default memberwise copy constructor that will do the wrong thing - it's a problem waiting to happen.

    To some extent it depends on what the class is going to be used for - if you're writing a class that's part of a library, for instance, it makes much more sense to implement the copy constructor for consistency reasons. You have no idea a priori how your class is going to be used.

    0 讨论(0)
提交回复
热议问题