- memory[meta header]
- std[meta namespace]
- function template[meta id-type]
- cpp20[meta cpp]
namespace std {
template<class T> unique_ptr<T> make_unique_default_init(); // (1)
template<class T> unique_ptr<T> make_unique_default_init(size_t n); // (2)
template<class T, class... Args> unspecified make_unique_default_init(Args&&...) = delete; // (3)
}
- unique_ptr[link unique_ptr.md]
- unspecified[italic]
unique_ptr
オブジェクトを構築する。その際、型T
のオブジェクトはデフォルト構築される。
- (1) :
T
が配列型でないときに選択される。 - (2) :
T
が不明な境界の配列のときに選択される。 - (3) : 許可されていないオーバーロードとして宣言される。
T
は既知の境界の配列型である。
- (1) :
unique_ptr<T>(new T())
- (2) :
unique_ptr<T>(new
remove_extent_t
<T>[n]())
#include <iostream>
#include <memory>
#include <utility>
int main()
{
std::unique_ptr<std::pair<int, int>> p1 = std::make_unique_default_init<std::pair<int, int>>();
std::cout << p1->first << ':' << p1->second << std::endl;
}
- std::make_unique[color ff0000]
0:0
- C++20
- Clang: 10.0.0 現在未対応
- GCC: 10.0.0 現在未対応
- Visual C++: ??