I was wondering why shared_ptr
doesn\'t have an implicit constructor. The fact it doesn\'t is alluded to here: Getting a boost::shared_ptr for this
(I f
I think there is no reason to have explicit in this constructor.
Mentioned examples with incorrect using of offset address operator (&) make no sense since there is no place to use such operator in modern C++. Except only such idiomatic code in assignment/comparision operator as 'this == &other' and maybe some test code.
Long time lurker, and a 3rd year soft eng student here, Haphazard guess would be, to stop you from attempting to convert a 'natural' pointer to a shared_ptr, then deallocing the pointed object, without the shared_ptr knowing about the dealloc.
(Also, reference counting problems blah blah).
int main() {
int foo = 5;
fun(&foo);
cout << foo << endl; // ops!!
return 0;
}
In this case, the shared_ptr would attempt to free your stack allocated int. You wouldn't want that, so the explicit constructor is there to make you think about it.
The logical reason is that:
delete
operator is not implicit in C++shared_
whatever, scoped_
whatever, ...) is really a (delayed) call to the delete
operator