Почему явный конструктор, ожидающий, что std :: shared_ptr принимает nullptr?

Следующий код прекрасно компилируется с gcc 4.8.1

#include <memory>

class Foo {
public:
explicit Foo(const std::shared_ptr<Foo>& foo) {

}
};

int main() {
Foo foo(nullptr);
}

Почему это возможно? Разве явное не должно мешать компилятору неявно вызывать std :: shared_ptr (nullptr)?

0

Решение

Разве явное не должно мешать компилятору неявно вызывать std :: shared_ptr (nullptr)?

Нет, явный конструктор остановит это:

Foo foo = some_shared_ptr;

Это не влияет на конструкторы shared_ptr, поэтому неявное преобразование из nullptr в shared_ptr все еще разрешено

4

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector