#include <iostream>
#include <vector>

class ints
{
public:
  //vetor de ponteiros para int
  std::vector<int*> inteiros;
  //função que imprime valor de todos inteiros apontados
  void escreve()
  {
    for(auto i:inteiros)
      std::cout << *i << ", ";
    std::cout << std::endl;
  }
};

int main()
{
  //declara 3 ints
  int x = 1;
  int y = 2;
  int z = 3;
  //cria objeto A da classe ints
  ints A;
  //salva ponteiros em A 
  A.inteiros.push_back(&x);
  A.inteiros.push_back(&y);
  A.inteiros.push_back(&z);
  //cria objeto B através de cópia
  ints B(A);
  //cria objeto C e usa operador atribuição
  ints C;
  C = A;
  //verifica conteúdo
  A.escreve();
  B.escreve();
  C.escreve();
  
  //A, B e C apontam para os mesmos inteiros, incluindo y
  y = 666;
  //verifica-se que a mudança é visível através de todos objetos:
  A.escreve();
  B.escreve();
  C.escreve();
}