我正在处理一些必须返回std::auto_ptr
的旧代码,我的经验相对较少。我遇到过这样的情况:
// I need to populate this function
std::auto_ptr<Base> Func()
{
std::auto_ptr<Derived> derivedPtr = new Derived;
// now I want to return
return derivedPtr; // error: conversion from std::auto_ptr<Derived> to std::auto_ptr<Base> is ambiguous
}
我是否需要先释放auto_ptr?真正过于明确的方式就像return static_cast<Base>(derivedPtr.release())
,但我怀疑这不是必要的。
答案 0 :(得分:4)
你可以使用......
return std::auto_ptr<Base>(derivedPtr); // explicitly use constructor
...或...
return derivedPtr.operator std::auto_ptr<Base>(); // use cast/conversion operator
(您无法返回derivedPtr
的原因是以上是不明确的候选人)。