1

C++11 では、ポインタを に一意化するためのシンタティック シュガーがありませんstd::unique_ptr。したがって、可変クラス メンバー (通常はさまざまな種類のcachestd::uniquify_ptr ) の簡単な (非コンストラクター)割り当てに通常使用される次の小さなヘルパー関数を作成しました。

#include <memory>

namespace std
{
    template<typename T>
    inline unique_ptr<T> uniquify_ptr(T* ptr)
    {
        return unique_ptr<T>(ptr);
    }
}

ここで安全性の観点から何か不足していますか? 同様の機能はすでに利用可能ですか?

4

3 に答える 3

3

いいえ、同様の機能はまだありません。どうですか

auto ptr(std::uniquify_ptr(new T()));

よりも良い

std::unique_ptr<T> ptr(new T());

? つまり、なぜこれが存在する必要があるのでしょうか。どちらかといえば、それはあなたをあまり節約していません。

于 2011-10-01T22:38:03.693 に答える
2

unique_ptr<T>から直接構築できるT*ので、ほとんど必要ありません。このようなファクトリ関数は、シンタックス シュガー以外にはほとんど使用されませんauto x = make_unique<T>(...);。また、あなたmoveは冗長です。

于 2011-10-01T22:38:24.230 に答える
0

@Schaub: これを使用して、既存の変更可能なクラス メンバーの値変更しています。その場合 std::unique_ptr

m_hashA = std::uniquify(new Hashes(cnt));

よりも便利です

m_hashA = std::unique_ptr<Hashes>(new Hashes(cnt)));

メンバーが次のように宣言されている場合

mutable std::unique_ptr<Hashes> m_hashA; ///< Hash Table for Alternatives.

ありがとう

于 2011-10-02T13:38:31.457 に答える