52

重複の可能性:
make_uniqueと完全な転送

C ++ 11にテンプレートがあるのに、make_sharedテンプレートがないのはなぜmake_uniqueですか?

これにより、コードに非常に一貫性がなくなります。

auto x = make_shared<string>("abc");
auto y = unique_ptr<string>(new string("abc"));
4

1 に答える 1

62

この記事のハーブサッターによると、それは「部分的に見落とし」でした。この記事には優れた実装が含まれており、それを使用するための強力なケースになります。

template<typename T, typename ...Args>
std::unique_ptr<T> make_unique( Args&& ...args )
{
    return std::unique_ptr<T>( new T( std::forward<Args>(args)... ) );
}

更新:元の更新が更新され、強調が変更されました。

于 2012-09-25T09:52:40.673 に答える