我看到了下面的代码,

#include <new>
#include <memory>
using namespace std;

class Fred;  // Forward declaration
typedef  auto_ptr<Fred>  FredPtr;

class Fred {
public:
  static FredPtr create(int i)
  {
    return new Fred(i); // Is there an implicit casting here? If not, how can we return
                        // a Fred* with return value as FredPtr?
  }
private:
  Fred(int i=10)      : i_(i)    { }
  Fred(const Fred& x) : i_(x.i_) { }
  int i_;
};

请参阅函数创建中列出的问题。

谢谢

//根据评论更新

是的,代码不能通过VC8.0
错误 C2664:“std::auto_ptr::auto_ptr(std::auto_ptr &) throw()”:无法将参数 1 从“Fred *”转换为“std::auto_ptr &”

该代码是从 C++ FAQ 12.15 中复制的。

但是,在进行以下更改后,
replace
  return new Fred(i);
with
  return auto_ptr<Fred>(new Fred(i));

这段代码可以通过VC8.0编译。但我不确定这是否是正确的修复。

最佳答案

std::auto_ptr 确实有一个以原始指针作为参数的构造函数,但该构造函数是 explicit 并且不能用作转换构造函数。

这段代码不会编译。

关于C++ -- 这里是否有从 Fred* 到 auto_ptr<Fred> 的隐式转换?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4576066/

10-09 00:24