std :: fill_n для массива не POD, возможных для первой инициализации? - PullRequest
2 голосов
/ 30 марта 2011

возможно ли использовать std::fill для инициализации массива не POD-типов?

В документации сказано, что std::fill использует operator= для инициализации массива, а не для построения копии размещения. Оператор присваивания, однако, на самом деле не имеет возможности освободить текущую память, когда он вызывается в неинициализированном пространстве, насколько я вижу.

Пример:

struct NonPod
{
    std::string myStr;
};

NonPod arr[10];
NonPod prototype;
NonPod * ptr = &arr[0];
std::fill_n(ptr, 10, prototype);

1 Ответ

5 голосов
/ 30 марта 2011

Вы ищете std::uninitialized_fill_n из заголовка memory, а не std::fill_n из заголовка algorithm.

Осторожно, однако!Ваш код не учитывает выравнивание или отступы - подумайте об использовании std::alignment_of или подходящей замене буста на платформах, где он недоступен.

...