Есть ли способ автоматически инициализировать std :: shared_ptr для хранения действительного объекта? - PullRequest
0 голосов
/ 11 мая 2018

Когда я пишу

std::shared_ptr<MyType> x;

x инициализируется пустым общим указателем на nullptr. Но я бы хотел, чтобы он автоматически вызывал MyType по умолчанию (или какой-либо другой назначенный конструктор). Я знаю, что я мог просто написать:

std::shared_ptr<MyType> x = std::maked_shared<MyTYpe>();

но иногда люди забывают, и тогда вы сталкиваетесь с неприятностями, поэтому было бы неплохо обеспечить выполнение этого компилятором.

1 Ответ

0 голосов
/ 11 мая 2018

Вы можете создать класс, например:

template <typename T>
struct defaulted_shared_ptr : std::shared_ptr<T>
{
    using std::shared_ptr<T>::shared_ptr;
    defaulted_shared_ptr() : std::shared_ptr<T>(std::make_shared<T>()) {}
};

Тогда

defaulted_shared_ptr<Foo> foo;

будет содержать значение по умолчанию Foo

Демо

...