std::make_uniqueStandart C ++ 11 kitaplığında neden işlev şablonu yok ? buldum
std::unique_ptr<SomeUserDefinedType> p(new SomeUserDefinedType(1, 2, 3));
biraz ayrıntılı. Aşağıdakiler çok daha hoş olmaz mıydı?
auto p = std::make_unique<SomeUserDefinedType>(1, 2, 3);
Bu newgüzel gizler ve sadece bir kez türü bahseder.
Her neyse, işte benim uygulama girişimim make_unique:
template<typename T, typename... Args>
std::unique_ptr<T> make_unique(Args&&... args)
{
return std::unique_ptr<T>(new T(std::forward<Args>(args)...));
}
Bu std::forwardşeylerin derlenmesini sağlamak biraz zaman aldı , ama doğru olup olmadığından emin değilim. Bu mu? Tam olarak ne anlama std::forward<Args>(args)...geliyor? Derleyici bundan ne çıkarıyor?
make_uniqueaçıkçası düz eski aracılığıyla ayırdığı için, özel bir deleter ile newdolayısıyla ve gereken kullanmak düz eski delete:)
make_uniqueile sınırlı olacak new... Eh, yazmak istiyorsanız sorun değil, ama böyle bir şeyin neden standardın bir parçası olmadığını görebiliyorum.
make_uniqueyapıcısı std::unique_ptraçık olduğu için bir şablon kullanmayı seviyorum ve bu nedenle unique_ptrbir işlevden dönmek ayrıntılıdır . Ayrıca, oldukça kullanmayı tercih ediyorum auto p = make_unique<foo>(bar, baz)daha std::unique_ptr<foo> p(new foo(bar, baz)).
unique_ptrbir şekilde izin vermeniz gereken ikinci bir şablon parametresi aldığını unutmayın - bu farklıdırshared_ptr.