最終更新日時:
が更新

履歴 編集

function
<memory>

std::make_shared(C++11)

namespace std {
  template <class T, class... Args>
  shared_ptr<T> make_shared(Args&&... args);
}

概要

shared_ptrオブジェクトを構築する。

戻り値

Tに対する shared_ptr<T>オブジェクトを生成し返却する。
このとき、args... で受け取った引数リストを型 Tのコンストラクタへ渡してshared_ptr<T>型のオブジェクトを生成する。

備考

shared_ptr<T>(new T(args...)); というように、コンストラクタを呼び出す方法でもshared_ptrオブジェクトを構築できる。しかしこの方法では、以下の2つのメモリ確保が必要になり、効率がよくない:

  • ユーザーによるオブジェクトの生成
  • 内部的な参照カウンタの生成

make_shared() 内部的にオブジェクトを生成するため、オブジェクトの生成と参照カウンタの生成を、1つの大きなブロックとしてメモリを確保するため、より効率的になる。

メモリの確保にユーザー定義のアロケータを使用したい場合には、 allocate_shared() を使用する。

#include <memory>
#include <iostream>

int main() {
  std::shared_ptr<int> sp = std::make_shared<int>(42);
  if(sp) {
    std::cout << *sp << std::endl;
  }
}

出力

42

バージョン

言語

  • C++11

処理系

備考

Visual C++ 10.0~11.0 でも使用可能だが、コンパイラが可変引数テンプレートに対応していないため、最大10個の引数を受け取れる形で実装されている。

関連項目

参照