Когда вызовать select_on_container_copy_construction для контейнера?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Когда вызовать select_on_container_copy_construction для контейнера?

Сообщение Anonymous »

Я пытаюсь спроектировать контейнер с аккурсом распределения с нуля. В классе std :: allocator_traits есть метод участника с именем select_on_container_copy_construction (..) . Я видел вопрос, охватывающий причину его существования. Но я не мог получить, где я должен использовать этот метод. Вот упрощенный пользовательский контейнер с некоторыми заметками на нем. < /P>
/*** Libraries ***/
#include // std::allocator, std::allocator_traits

/*** Container Class ***/
template
class CustomContainer{
public:
using size_type = typename std::allocator_traits::size_type;
using pointer = typename std::allocator_traits::pointer;

/*** Constructors and Destructor ***/
// Default constructor
CustomContainer() = default;

// Copy constructor
CustomContainer(const CustomContainer& other)
: allocator(std::allocator_traits::select_on_container_copy_construction(other.allocator))
{
// Copy construction algorithm here...
}

// Move constructor
CustomContainer(CustomContainer&& other)
: allocator(/* What to do here? */)
{
// Move construction algorithm here...
}

/*** Operators ***/
CustomContainer& operator=(const CustomContainer& other)
{
allocator = other.allocator; // Is that true?

// Copy assignment algorithm here...
}

/*** Member Methods ***/
// Some member methods here..

private:
/*** Members ***/
pointer data = nullptr;
std::size_t sz = 0;
Allocator allocator;
};
< /code>
Как видите, я называл метод select_on_container_copy_construction (..) < /code> в списке инициализации конструктора копирования. < /p>

Есть ли какие -либо другие места, которые я должен снова назвать этот метод? Например, для этого могут понадобиться методы конструктора или перемещение?>

Подробнее здесь: https://stackoverflow.com/questions/693 ... -container
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»