fork download
  1. #include <cstring>
  2. #include <iostream>
  3. #include <memory>
  4.  
  5. class String {
  6. public:
  7. String(const char* s) : data_(strdup(s)) {}
  8. ~String() { free(const_cast<char*>(data_)); }
  9. // Строки в Java immutable, имитирующие им C++ строки - тоже.
  10. String operator=(String&&) = delete;
  11. String operator=(const String&) = delete;
  12.  
  13. friend std::ostream& operator<<(std::ostream& o,
  14. const String& s) {
  15. o << s.data_;
  16. return o;
  17. }
  18. private:
  19. const char* data_;
  20. };
  21.  
  22.  
  23. int main() {
  24. auto foo = std::make_shared<String>("foo");
  25. auto bar = std::make_shared<String>("bar");
  26. std::swap(foo, bar);
  27. // foo приняло значение "bar", а bar" приняло значение "foo".
  28. std::cout << "foo: " << (*foo) << "\n";
  29. std::cout << "bar: " << (*bar) << "\n";
  30.  
  31. std::cin.get();
  32. }
Success #stdin #stdout 0s 4412KB
stdin
Standard input is empty
stdout
foo: bar
bar: foo