Не может быть неявного преобразования, потому что неявное преобразование не имеет контекста, чтобы делать правильные вещи.printer
принимает указатель, не являющийся владельцем, но как насчет других функций, которые должны стать собственниками?Например,
void kill(int *p) { delete p; }
Молчаливое преобразование при вызове kill(p);
было бы неправильным!Это приведет к двойному удалению.Указатель не может знать, что он должен прекратить владеть объектом, он должен быть передан через вызов release
.Все остальное было бы неправильно.
Поскольку интеллектуальные указатели предназначены только для принудительного применения явной семантики владения, преобразование в необработанный указатель также должно быть явным и иметь имя, которое сообщает о влиянии владения.