Мне нужен класс (в C++ 11), который хранит пару полей (включая буфер). Я начал с malloc()
в конструкторе и free()
в деструкторе (я не касался C/C++ в течение некоторого времени, так что это все, что я вспомнил).C++ Буферные боли
Следующее, что я вспомнил (из-за сбоев), что мне нужно реализовать конструктор копирования и оператор присваивания. Теперь у меня есть полный экран кода только для класса с 3 полями (одним из которых является буфер).
вопрос.
Что следует использовать? (Я ослеплен количеством выборов - std::vector
, std::array
, std::shared_ptr
, boost::scoped_ptr
и может быть чем-то еще).
Функциональность для этого буфера, который я искал являются:
- как можно меньше управления памятью
- избавлении от этих конструкторов копирования и операторов присваивания
- возможность использовать его недействительным * (Я должен передать его функциям, которые принимают «void *»)
- Возможность доступа к чтению/записи в случайном порядке (возможно, мне понадобится получить случайный диапазон и записать произвольный диапазон)
- выделить его в куче (буфер может быть достаточно большим)
- предпочтительно использование некоторого стандартного объекта
Нужно уметь копировать или назначать свой класс? –
Использование 'malloc' и' free' в коде C++ почти всегда является ошибкой. Кроме того, вы не можете «избавиться от этих конструкторов копирования и операторов присваивания». Они являются одним из многих фундаментальных аспектов C++. Если вы не хотите их использовать, не используйте C++. –
@KerrekSB Да. Я хочу, чтобы иметь возможность копировать мой класс. Однако я надеюсь, что какой-нибудь умный указатель справится с этим. Я бы предпочел, чтобы они делили указатель и подсчитывали ссылки. Однако даже прямое копирование контента работает для меня. –