Как создать уникальный_PTR, защищая от неявного преобразования в CTOR?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Как создать уникальный_PTR, защищая от неявного преобразования в CTOR?

Сообщение Anonymous »

Вот пример: < /p>
class Example {
public:
Example(int m, int n, double pad) {}
Example(double size, double pad) {}
};

int main() {
Example example { 1.0, 1.0 };
auto ptr = std::make_unique(1.0, 1.0);
}

После удаления PAMATER PAD двух конструкторов, пример локального объекта больше не будет компилировать, что полезно. Но ptr по -прежнему компилируется, в то время как значения параметров изменились молча, из -за неявного преобразования в make_unique :
class Example {
public:
Example(int m, int n) {}
Example(double size) {}
};

int main() {
Example example { 1.0, 1.0 }; // Won't compile, which is helpful for reminding me to modify it.
auto ptr = std::make_unique(1.0, 1.0); // Still compiles, but parameter meanings are changed silently.
}
< /code>
Я не уверен, что это лучший способ: < /p>
auto ptr = std::unique_ptr(new Example { 1.0, 1.0 });


Подробнее здесь: https://stackoverflow.com/questions/797 ... on-in-ctor
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»