LINUX.ORG.RU

aligned_storage для не-POD

 


0

3

Вопрос скорее теоретический, нежели практический. Просто хочется лучше понимать происходящее внутри библиотеки и возможности которые дают новые фичи

Допустим я хочу написать свой optional класс (типо boost::optional)

template<class T>
class optional
{
 ...
public:
 optional(const T& obj) 
 {
   new (storage) T(obj);
   initialized = true;
  }
...
private:
  bool initialized;
  aligned_storage<sizeof<T>, alignof<T>>::type storage;
  

};

В доке написанно

Provides the member typedef type, which is a PODType suitable for use as uninitialized storage for any object whose size is at most Len and whose alignment requirement is a divisor of Align.

Но я пока не могу понять, что мешает использовать такой класс для не-POD объектов. Может я что-то упускаю?

Я знаю, что memcpy для не-POD объекта в буфер (размером sizeof) скорее всего приведет к некорректному объекту. Но тут у нас копирования байтов нет, просто создание нового объекта через конструктор копирования...

★★★★★

Последнее исправление: cetjs2 (всего исправлений: 1)

Provides the member typedef type, which is a PODType
the member typedef type ... is a PODType

Это они о aligned_storage<sizeof<T>, alignof<T>>::type, а не о объекте, который там будет храниться.

xaizek ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.