#include #include using namespace std; class Name { char* m_mem; public: // Standardkonstruktor mit Standardwert Name(const char* n = "Peter") { m_mem = new char[std::strlen(n)+1]; std::strcpy(m_mem, n); } // copy-constructor fur tiefe Kopien Name(const Name& n) { m_mem = new char[std::strlen(n.m_mem+1)]; std::strcpy(m_mem, n.m_mem); } // verschiebekonstruktor Name(Name&& n) { m_mem = n.m_mem; // n.m_mem = nullptr; // Objekt ist noch abbaubar n.m_mem = new char[1]{0}; // ausgeschlachtetes Objekt ist noch verwendbar } const char* get_name() const { return m_mem; } }; int main() { Name n5{ "Fritz" }; Name n6{ n5 }; // Kopierkonstruktor wird aufgerufen Name n7{ Name{ "Muller" } }; // Kopierkonstruktor wird aufgerufen was eigentlich unnotig ist // deshalb Verschiebekonstruktor implementiert cout << n5.get_name() << endl; cout << n6.get_name() << endl; cout << n7.get_name() << endl; }