C ++ Упрощенная реализация контейнера с использованием std :: initializer_list (поведение под капюшоном)C++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 C ++ Упрощенная реализация контейнера с использованием std :: initializer_list (поведение под капюшоном)

Сообщение Anonymous »

Я пытаюсь реализовать очень упрощенную версию контейнера, чтобы продемонстрировать только то, как std :: initializer_list мог быть реализован под капюшоном. Это близко? < /P>
template
class Container
{
public:
Container(std::initializer_list lst)
: m_size(lst.size()), m_data(nullptr), m_constructed(0)
{
// Allocate raw memory (note: operator new returns uninitialized storage)
m_data = static_cast(::operator new(m_size * sizeof(T)));
try
{
// Copy Construct objects using placement new
for (auto& item : lst)
{
new(&m_data[m_constructed]) T(item);
++m_constructed;
}
}
catch(...)
{
// Only destroy the elements that were constructed
cleanup();
throw;
}
}

~Container()
{
cleanup();
}

private:
void cleanup()
{
// Only call the destructor for the constructed elements
for (size_t i = m_constructed; i > 0; --i)
{
m_data.~T();
}
::operator delete(m_data);
m_data = nullptr;
m_constructed = 0;
}

size_t m_size;
size_t m_constructed; // Tracks how many elements were actually constructed.
T* m_data;
};
< /code>
Вот ссылка, которая включает в себя основную функцию и класс для проверки моей упрощенной реализации контейнера. https://godbolt.org/z/8thk8g9p1

Подробнее здесь: https://stackoverflow.com/questions/794 ... nder-the-h
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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