fork download
  1. #include <iostream>
  2. #include <vector>
  3. #include <algorithm>
  4.  
  5. using namespace std;
  6.  
  7. struct A_s {
  8. unsigned int l;
  9. int *arr;
  10.  
  11. A_s(unsigned int size) : l(size), arr(new int[size])
  12. {
  13. cout<< "\t con addr: " << this << " Arr: " << arr <<endl;
  14. }
  15. A_s(const A_s &) = delete; // cannot copy
  16. A_s& operator=(const A_s &) = delete; // cannot assign
  17.  
  18. A_s(A_s && src): l(src.l), arr(src.arr)
  19. {
  20. cout << "\t mov addr: " << this << " Arr: " << arr << " from " << &src <<endl;
  21. src.arr = nullptr;
  22. src.l = 0;
  23. }
  24. A_s& operator=(A_s && src)
  25. {
  26. std::swap(arr, src.arr);
  27. std::swap(l, src.l);
  28. cout << "\t ass addr: " << this << " Arr: " << arr << " from " << &src <<endl;
  29. return *this;
  30. }
  31. ~A_s() {
  32. if (arr != nullptr)
  33. {
  34. cout << "\t des addr: " << this << " Arr: " << arr << endl;
  35. }
  36. delete[] arr; // works if line is removed
  37. }
  38. };
  39.  
  40. vector<A_s> vec;
  41.  
  42. int main() {
  43. cout<<"vec 0"<<endl;
  44. vec.emplace_back(1);
  45.  
  46. cout<<"vec 1"<<endl;
  47. vec.emplace_back(1);
  48.  
  49. cout<<"vec 2"<<endl;
  50. vec.emplace_back(1);
  51.  
  52. cout<<"vec 3"<<endl;
  53. vec.emplace_back(1);
  54.  
  55. cout<<"Remove vec 1"<<endl;
  56. vec.erase(vec.begin());
  57.  
  58. for(unsigned int i = 0; i < vec.size(); i++)
  59. cout<< "addr: " << &vec[i] << " Arr: " << vec[i].arr <<endl;
  60.  
  61. cout<<"end"<<endl;
  62. return 0;
  63. }
  64.  
Success #stdin #stdout 0s 15240KB
stdin
Standard input is empty
stdout
vec 0
	 con addr: 0x55b6006dfc30 Arr: 0x55b6006dfc50
vec 1
	 con addr: 0x55b6006dfc80 Arr: 0x55b6006dfca0
	 mov addr: 0x55b6006dfc70 Arr: 0x55b6006dfc50 from 0x55b6006dfc30
vec 2
	 con addr: 0x55b6006dfce0 Arr: 0x55b6006dfc30
	 mov addr: 0x55b6006dfcc0 Arr: 0x55b6006dfc50 from 0x55b6006dfc70
	 mov addr: 0x55b6006dfcd0 Arr: 0x55b6006dfca0 from 0x55b6006dfc80
vec 3
	 con addr: 0x55b6006dfcf0 Arr: 0x55b6006dfd10
Remove vec 1
	 ass addr: 0x55b6006dfcc0 Arr: 0x55b6006dfca0 from 0x55b6006dfcd0
	 ass addr: 0x55b6006dfcd0 Arr: 0x55b6006dfc30 from 0x55b6006dfce0
	 ass addr: 0x55b6006dfce0 Arr: 0x55b6006dfd10 from 0x55b6006dfcf0
	 des addr: 0x55b6006dfcf0 Arr: 0x55b6006dfc50
addr: 0x55b6006dfcc0 Arr: 0x55b6006dfca0
addr: 0x55b6006dfcd0 Arr: 0x55b6006dfc30
addr: 0x55b6006dfce0 Arr: 0x55b6006dfd10
end
	 des addr: 0x55b6006dfcc0 Arr: 0x55b6006dfca0
	 des addr: 0x55b6006dfcd0 Arr: 0x55b6006dfc30
	 des addr: 0x55b6006dfce0 Arr: 0x55b6006dfd10