Я пытаюсь реализовать очень упрощенную версию контейнера, чтобы продемонстрировать только то, как 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
C ++ Упрощенная реализация контейнера с использованием std :: initializer_list (поведение под капюшоном) ⇐ C++
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
На основе диапазона для Brace initializer по сравнению с неконфектными значениями?
Anonymous » » в форуме C++ - 0 Ответы
- 3 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Как подразумевать заменить все std :: string, чтобы быть глупостью :: fbstring под капюшоном?
Anonymous » » в форуме C++ - 0 Ответы
- 7 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Почему упрощенная версия максимального (десятичного) медленнее, чем реализация Link?
Anonymous » » в форуме C# - 0 Ответы
- 4 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Почему упрощенная версия максимального (десятичного) медленнее, чем реализация Link?
Anonymous » » в форуме C# - 0 Ответы
- 4 Просмотры
-
Последнее сообщение Anonymous
-