Re[2]: Копирующий конструктор и копирующий operator= по умолчанию.
От: PM  
Дата: 18.09.12 12:39
Оценка: +4 :)
Здравствуйте, Шебеко Евгений, Вы писали:

ШЕ>Если класс не содержит явного копирующего конструктора или operator=, то они создаются неявно.

ШЕ>Об этом надо помнить.

ШЕ>Допустим у нас есть класс, который содержит в себе указатель на свой буффер.


[тут был код очередного класса буфера]

Для меня new вне конструктора умного указателя (std::shared_ptr, std::unique_ptr или их аналогов из Boost) — признак плохого кода.

В прикладном коде new/delete не нужен, для буфера есть std::vector<char> или его суженный аналог:

class buffer
{
public:
   buffer() {}
   buffer(char const* data, size_t size) : data_(data, data + size) {}

   bool empty() const { return data_.empty(); }

   size_t size() const { return data_.size(); }
   void resize(size_t new_size) { data_.resize(new_size); }

   char const* data() const { return data_.empty()? nullptr : &data_[0]; }
   char* data() { return data_.empty()? nullptr : &data_[0]; }
private:
   std::vector<char> data_;
};
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.