010: copy constructor

コピーコンストラクタを定義します。7つあるコンストラクタの4つ目の定義になります。
template <typename T>
class myvector
{
...

private:
    using self_type = myvector;
...

public:
    /**
     * @brief      Copy constructor. Constructs the container with the copy of the
     *             contents of other.
     * @param[in,out] other: Another container to be used as source to initialize the
     *                       elements of the container with.
     */
    myvector(const self_type& other) :
        heap_(other.size() ? mymalloc(other.size()) : nullptr),
        size_(other.size()),
        capacity_(other.size())
    {
        pointer p = heap_;
        for (auto i = other.cbegin(); i != other.cend(); ++i) {
            new(p++) value_type(*i);
        }
    } 
...
};
引数の other の size() の数だけ領域を確保し、placement new でコピーしていきます。 コピー元が自分自身のため、check_length() と使ったサイズチェックは不要となります。


全ソースコード: https://github.com/suomesta/myvector/tree/master/010

0 件のコメント:

コメントを投稿