fork download
  1. #include <iostream>
  2. #include <memory>
  3. #include <string>
  4. #include <ostream>
  5.  
  6. using namespace std;
  7.  
  8. class Thing {
  9. private:
  10. string name;
  11.  
  12. public:
  13. Thing(): name() {
  14. cout << "Creating anonymous thing" << endl;
  15. }
  16.  
  17. Thing(string name): name(name) {
  18. cout << "Creating thing " << name << endl;
  19. }
  20.  
  21. ~Thing() {
  22. cout << "Destroying thing " << this->name << endl;
  23. }
  24.  
  25. void setName(const string & name) {
  26. this->name = name;
  27. }
  28.  
  29. string getName() {
  30. return this->name;
  31. }
  32. };
  33.  
  34. void swapThings(shared_ptr<Thing> & a, const shared_ptr<Thing> b) {
  35. a->setName("foo");
  36. a = b;
  37. }
  38.  
  39. int main() {
  40. auto a = make_shared<Thing>(Thing());
  41. auto b = make_shared<Thing>(Thing("bar"));
  42.  
  43. swapThings(a, b);
  44.  
  45. cout << "a::name: " << a->getName() << endl;
  46. cout << "b::name: " << b->getName() << endl;
  47.  
  48. return 0;
  49. }
Success #stdin #stdout 0s 3276KB
stdin
Standard input is empty
stdout
Creating anonymous thing
Destroying thing 
Creating thing bar
Destroying thing bar
Destroying thing foo
a::name: bar
b::name: bar
Destroying thing bar