Не уверен, является ли это ловушкой / ловушкой, но это, безусловно, менее чем очевидно:
- Const auto_ptr не может передать свое владение содержащимся указателем
Другими словами:
const auto_ptr<Foo> ap(new Foo());
auto_ptr<Foo> ap2;
ap2 = ap; // Not legal!
Это на самом деле весьма полезно , если вы хотите принять аргумент auto_ptr и гарантировать, что вы не станете владельцем принадлежащего указателя, но этоТакже может быть удивительно, если вы ожидаете, что const auto_ptr<Foo>
будет вести себя как Foo const*
.