「std::make unique」の版間の差分
提供: C++入門
(ページの作成:「std::make_unique とは、C++14で追加された std::unique_ptrクラスのオブジェクトを生成するヘルパー関数です。ヘルパー関数を...」) |
(相違点なし)
|
2014年11月9日 (日) 16:53時点における最新版
std::make_unique とは、C++14で追加された std::unique_ptrクラスのオブジェクトを生成するヘルパー関数です。ヘルパー関数を使用することでnewの呼び出しは、不要となります。
読み方
- std::make_unique
- えすてぃーでぃー めいく ゆにーく
目次
概要
C++14以前ではstd::unique_ptrとnewを利用する場合、以下のコードを書きました。
std::unique_ptr<C> c(new C());
C++14でstd::make_uniqueを使用する場合、newは不要になります。
auto v1 = std::make_unique<C>();
例外
エラーがある場合は、コンストラクタによって例外が送出されます。
初期化について
初期値を与えない場合は、以下の通りです。
auto v1 = std::make_unique<C>();
初期値を与える場合は、以下の通りです。
auto v2 = std::make_unique<C>(1,2,3);
配列を宣言する場合には、以下の通りです。size は、配列の数を指定します。
std::unique_ptr<C[]> v3 = std::make_unique<C[]>(size);
ヘッダファイル
#include <memory>
std_make_unique1.cpp の例
ソースコード std_make_unique1.cpp
/* * std_make_unique1.cpp * Copyright (C) 2014 kaoru <kaoru@bsd> */ #include <iostream> #include <memory> struct C { int x, y, z; C() : x(0), y(0), z(0) { } C(int x, int y, int z) : x(x), y(y), z(z) { } friend std::ostream& operator<<(std::ostream& os, C& c) { return os << "{" << "x:" << c.x << ", y:" << c.y << ", z:" << c.z << "}"; } }; int main(int argc, char const* argv[]) { int size = 5; auto v1 = std::make_unique<C>(); auto v2 = std::make_unique<C>(1,2,3); std::unique_ptr<C[]> v3 = std::make_unique<C[]>(size); std::cout << *v1 << std::endl; std::cout << *v2 << std::endl; std::cout << "v3" << std::endl; for (int i = 0; i < size; i++) { std::cout << "\t" << v3[i] << std::endl; } return 0; }
コンパイル
g++49 -I/usr/local/lib/gcc49/include/c++/ \ -Wl,-rpath=/usr/local/lib/gcc49 -std=c++14 std_make_unique1.cpp -o std_make_unique1
実行例
% ./std_make_unique1 {x:0, y:0, z:0} {x:1, y:2, z:3} v3 {x:0, y:0, z:0} {x:0, y:0, z:0} {x:0, y:0, z:0} {x:0, y:0, z:0} {x:0, y:0, z:0}