template <typename T>
class myvector
{
...
/**
* @brief Constructor with size and initial value. CConstructs the container
* with count copies of elements with value.
* @param[in] count: The size of the container.
* @param[in] value: The value to initialize elements of the container with.
* @throw std::length_error: If count is greater than max_size().
* @throw std::bad_alloc: If malloc() fails to allocate storage.
*/
myvector(size_type count, const value_type& value) :
heap_(count ? mymalloc(length_check(count)) : nullptr),
size_(count),
capacity_(count)
{
for (size_type i = 0; i < size_; i++) {
new(&heap_[i]) value_type(value);
}
}
...
};
今回定義したサイズと初期値を指定するコンストラクタと、前回定義したサイズ指定のコンストラクタとの違いは、placement new をする際にコピーコンストラクタを呼ぶのか、それともデフォルトコンストラクタを呼ぶのか、という点のみです。
全ソースコード: https://github.com/suomesta/myvector/tree/master/009
0 件のコメント:
コメントを投稿