Forgot file, it will go away soon though.
This commit is contained in:
parent
0bac4dbfd9
commit
bc3790efd3
1 changed files with 48 additions and 0 deletions
48
badref.cpp
Normal file
48
badref.cpp
Normal file
|
@ -0,0 +1,48 @@
|
||||||
|
#include <string>
|
||||||
|
#include <memory>
|
||||||
|
#include <iostream>
|
||||||
|
|
||||||
|
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;
|
||||||
|
}
|
Loading…
Add table
Add a link
Reference in a new issue