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

How do I return an auto_ptr of a base class using an auto_ptr of a derived class?

本文关键字:ptr auto 基类 返回 何使用 派生      更新时间:2023-10-16

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

您可以使用…

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

…或…

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

(你不能只返回derivedPtr的原因是,上述是模棱两可的候选)。