Overloading assignment operator in a derived class

Question | Mar 14, 2017 | rparekh 

Class Derived inherits class Base in below class hierarchy. Class Base has some private dynamically allocated data (not shown) that is deep copied in its overloaded assignment operator. Assume that the implementation of overloaded assignment operator is correct in Base. You have to select the correct implementation of assignment operator in class Derived from given choices.

class Base {
public:
  const Base& operator=(const Base& rhs) { 
    /* Assume implementation is 
        given and correct */ 
   return *this;
  }
   // --- more methods, constructors, and destructor --
private:
  // Some data
};

class Derived : public Base {
public:
  /*
     Overload assignment operator.
  */

   // --- more methods, constructors, and destructor --
private:
  std::string* str = nullptr;
};

Note that class Derived's data member str points to a dynamically allocated std::string object that must be deep copied inside assignment operator. Select the most appropriate implementation of assignment operator in Derived from given choices: