Opened 21 years ago
Closed 19 years ago
#41 closed Feature Requests (None)
smart_ptr: (auto_ptr) constructor
| Reported by: | d-elf | Owned by: | Peter Dimov |
|---|---|---|---|
| Milestone: | Component: | smart_ptr | |
| Version: | None | Severity: | |
| Keywords: | Cc: |
Description
I'm wondering why the smart_ptr's (auto_ptr)
constructor is defined as explicit?
In smart_ptr's documentation this constructor is not
explicit:
--cut--
template<typename Y>
shared_ptr(std::auto_ptr<Y>& r);
--cut--
but in source:
--cut--
template<typename Y>
explicit shared_ptr(std::auto_ptr<Y>& r) {
pn = new long(1); // may throw
px = r.release(); // fix: moved here to stop
leak if new throws
}
--cut--
explicit shared_ptr(std::auto_ptr<T>& r) {
pn = new long(1); // may throw
px = r.release(); // fix: moved here to stop
leak if new throws
}
--cut--
It would be nice to do for example following without
initializing an shared_ptr instance by myself:
// START
void func_that_eats_both_ap_and_sp(const
boost::shared_ptr<int>& sp)
{
// ...
}
int main(void)
{
std::auto_ptr<int> ap(0);
func_that_eats_both_ap_and_sp(ap);
}
// END
auto_ptr's constructor should not be the reason why
this is defined as it is, since it is defined as
explicit...
-d-elf
Note:
See TracTickets
for help on using tickets.
