diff --git a/badref.cpp b/badref.cpp new file mode 100644 index 0000000..3d49f76 --- /dev/null +++ b/badref.cpp @@ -0,0 +1,48 @@ +#include +#include +#include + +using std::string, std::unique_ptr, + std::shared_ptr, std::make_unique; + +class BadRef { + string &name; + +public: + BadRef(string &name) : name(name) {} + + void set_name(string &n) { + name = n; + } +}; + +class GoodRef { + string *name; + +public: + /* + * After calling, name is owned. + */ + GoodRef(string *n) : name(n) {} + + void print() { + std::cout << "My name is " << *name << std::endl; + } +}; + +int main() { + string my_name = "Zed"; + string your_name = "Alex"; + string &ref_test = my_name; + string *ptr_name = new string("Pointer"); + + ref_test = your_name; + + auto br = BadRef(my_name); + br.set_name(your_name); + + auto gr = GoodRef(ptr_name); + gr.print(); + + return 0; +}