#include #include using std::string; using std::cout; class SimpleDoubleHolder{ public: // 1) Constructor (with optional argument) // 2) Include the "Big Five" here // 2a) // 2b) // 2c) // 2d) // 2e) void setDouble( double value); void printDouble(); private: double* m_DoublePtr; }; void SimpleDoubleHolder::printDouble(){ cout << "m_DoublePtr: "; if( m_DoublePtr == nullptr){ cout << "nullptr\n"; }else{ cout << *m_DoublePtr << "\n"; } } // setter for data member void SimpleDoubleHolder::setDouble( double value){ m_DoublePtr = new double( value); } // Constructor (with optional argument) int main(){ double PI = 3.14159; SimpleDoubleHolder original; original.setDouble( PI); cout << "original ...\n"; original.printDouble(); cout << "SimpleDoubleHolder copy( original) ...\n"; SimpleDoubleHolder copy( original); cout << "original ...\n"; original.printDouble(); cout << "copy ...\n"; copy.printDouble(); SimpleDoubleHolder copyWithAssignment; cout << "\ncopyWithAssignment = original ...\n"; copyWithAssignment = original; cout << "original ...\n"; original.printDouble(); cout << "copyWithAssignment ...\n"; copyWithAssignment.printDouble(); cout << "\nSimpleDoubleHolder another( std::move( original))...\n"; SimpleDoubleHolder another( std::move( original)); cout << "original ...\n"; original.printDouble(); cout << "another ...\n"; another.printDouble(); SimpleDoubleHolder yetAnother; cout << "\nyetAnother = std::move( copy);...\n"; yetAnother = std::move( copy); cout << "copy ...\n"; copy.printDouble(); cout << "yetAnother ...\n"; yetAnother.printDouble(); return 0; }