如何使用派生类的auto_ptr返回基类的auto_ptr?

时间:2014-05-16 01:16:57

标签: c++

我正在处理一些必须返回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()),但我怀疑这不是必要的。

1 个答案:

答案 0 :(得分:4)

你可以使用......

return std::auto_ptr<Base>(derivedPtr);   // explicitly use constructor

...或...

return derivedPtr.operator std::auto_ptr<Base>();  // use cast/conversion operator

(您无法返回derivedPtr的原因是以上是不明确的候选人)。