printSTL

printУмные указатели

Вместо указателей языка C рекомендуется использовать умные указатели:
  • unique_ptr – уникальный, при уничтожении указателя удаляется и объект, при присваивании и копировании указателей передается владение объектом, а старый указатель обнуляется.
  • shared_ptr – с подсчетом ссылок на объект, когда количество указателей на этот объект (или какую-то его часть) становится равно нулю, объект удаляется.
  • weak_ptr – вспомогательный, не учитывается при подсчете ссылок, но с помощью метода expired позволяет обнаружить, что объект был удален.
У всех типов указателей перегружены операции -> и *(разыменования), а с помощью метода get можно получить обычный указатель.
struct data {int x; };
{ unique_ptr<data> p1(new data);
  p1->x=1;
  // автоматическое уничтожение объекта
}
{ shared_ptr<data> p1(new data),p2;
  weak_ptr<data> p3;
  p2=p1;
  p3=p1;
  p1=nullptr;
  p2=nullptr; 
  // автоматическое уничтожение объекта
  if(!p3.expired()) p3->x=1;
}
Для указателей на массивы, которые требуют специального деструктора, в качестве параметра шаблона нужно указать тип[]. Также вместо операций разыменования (*) и -> появляется операция индексации:
{ unique_ptr<int[]> arr{new int[10]};
  arr[1]=10;
  // автоматическое уничтожение объекта
}
loading