Можно ли написать умный указатель, который выделяет сам объект в своем конструкторе - вместо того, чтобы разработчику приходилось звонить new
? Другими словами, вместо написания:
std::unique_ptr<myClass> my_ptr(new myClass(arg1, arg2))
... можно написать:
std::smarter_ptr<myClass> my_ptr(arg1, arg2)
Является ли синтаксис языка способным выражать это? Было бы желательно? Отвратительный? Я имею в виду, в частности, защиту от этой ошибки (что я, конечно же, сделал сам):
myFunction(std::unique_ptr<myClass>(new myClass()), std::unique_ptr<myClass>(new myClass()))
..., который рискует протекать в зависимости от того, какой объект будет выделен первым, если произойдет второе распределение и выбрасывается до того, как первый объект будет безопасно помещен в его интеллектуальный указатель. Но мог ли разумный указатель сделать это безопасным?