As the code below, the copy assignment operator has to check whether the input object pointers to itself or not. I wonder why copy constructor does not need to do the same check.
I am novice in C++.I would be grateful to have some help on this question.
  class rule_of_three
    {
        char* cstring; // raw pointer used as a handle to a dynamically-allocated memory block
        void init(const char* s)
        {
            std::size_t n = std::strlen(s) + 1;
            cstring = new char[n];
            std::memcpy(cstring, s, n); // populate
        }
     public:
        rule_of_three(const char* s = "") { init(s); }
        ~rule_of_three()
        {
            delete[] cstring;  // deallocate
        }
        rule_of_three(const rule_of_three& other) // copy constructor
        { 
            init(other.cstring);
        }
        rule_of_three& operator=(const rule_of_three& other) // copy assignment
        {
            if(this != &other) {
                delete[] cstring;  // deallocate
                init(other.cstring);
            }
            return *this;
        }
    };
Aucun commentaire:
Enregistrer un commentaire