fork(1) download
  1. #include <iostream>
  2. #include <string>
  3. #include <vector>
  4. using namespace std;
  5.  
  6. class IntVector
  7. {
  8. public:
  9.  
  10. vector<int*> elements;
  11.  
  12. // default constructor
  13. IntVector() { cout << "\ndefault constructor\n\n"; }
  14.  
  15. // destructor
  16. ~IntVector() { cout << "\ndestructor\n"; clear(); }
  17.  
  18. // copy constructor
  19. IntVector(const IntVector& src);
  20.  
  21. // assignment
  22. IntVector& operator=(const IntVector& src);
  23.  
  24. // adiciona um elemento
  25. void add(int i) { elements.push_back(new int(i)); }
  26.  
  27. // libera elementos
  28. void clear();
  29.  
  30. // imprime elementos
  31. void print(const string& msg);
  32.  
  33. private:
  34.  
  35. // copia elementos
  36. void copy(const IntVector& src);
  37. };
  38.  
  39. void IntVector::clear()
  40. {
  41. cout << "liberando memoria\n";
  42.  
  43. for (auto ptr : elements)
  44. delete ptr;
  45.  
  46. elements.clear();
  47. }
  48.  
  49. void IntVector::copy(const IntVector& src)
  50. {
  51. cout << "copiando elementos\n";
  52.  
  53. for (auto srcP : src.elements)
  54. {
  55. // cria um ponteiro e inicializa com o valor correspondente
  56. int* newP(new int(*srcP));
  57. elements.push_back(newP);
  58. }
  59. }
  60.  
  61. // copy constructor
  62. IntVector::IntVector(const IntVector& src)
  63. {
  64. cout << "\ncopy constructor\n";
  65. copy(src);
  66. }
  67.  
  68. // assignment
  69. IntVector& IntVector::operator=(const IntVector& src)
  70. {
  71. cout << "assignment\n";
  72.  
  73. // libera os elementos atuais
  74. clear();
  75.  
  76. // copia novos elementos
  77. copy(src);
  78. }
  79.  
  80. void IntVector::print(const string& msg)
  81. {
  82. cout << msg <<": [";
  83.  
  84. for (auto p : elements)
  85. cout << " " << *p;
  86.  
  87. cout << "]\n";
  88. }
  89.  
  90.  
  91. int main()
  92. {
  93. // default constructor
  94. IntVector v1;
  95.  
  96. v1.add(1);
  97. v1.add(2);
  98. v1.add(3);
  99. v1.add(4);
  100. v1.add(5);
  101.  
  102. v1.print("v1");
  103.  
  104. // copy constructor
  105. IntVector v2 { v1 };
  106. v2.print("v2");
  107.  
  108. IntVector v3;
  109.  
  110. v3 = v1;
  111. v3.print("v3");
  112. }
Success #stdin #stdout 0s 3472KB
stdin
Standard input is empty
stdout
default constructor

v1: [ 1 2 3 4 5]

copy constructor
copiando elementos
v2: [ 1 2 3 4 5]

default constructor

assignment
liberando memoria
copiando elementos
v3: [ 1 2 3 4 5]

destructor
liberando memoria

destructor
liberando memoria

destructor
liberando memoria