-2

引用http://www.parashift.com/c++-faq-lite/ref-count-simple.html

class Fred {
public:
  static FredPtr create();              // Defined below class FredPtr {...};
  static FredPtr create(int i, int j);  // Defined below class FredPtr {...};
  ...
private:
  Fred();
  Fred(int i, int j);
  ...
};

class FredPtr { /* ... */ };

inline FredPtr Fred::create()             { return new Fred(); }
inline FredPtr Fred::create(int i, int j) { return new Fred(i,j); }

new Fred() 如何在最后两行代码中返回 FredPtr?我不明白。

4

2 回答 2

2

在您引用的链接中,FredPtr 类包含一个采用 Fred* 的自定义构造函数:FredPtr(Fred* p)。

编译器知道 Fred::create 返回一个 FredPtr。它看到调用 new Fred 的 return 语句(从而生成 Fred*),查看 FredPtr 构造函数列表,并选择需要 Fred* 的构造函数......一切都很好。

于 2013-08-12T04:22:17.837 回答
0

该行new Fred();返回一个Fred*.FredPtr 大概有一个声明为的转换构造函数FredPtr(Fred*)。这允许FredPtrFred*.

于 2013-08-12T04:18:52.217 回答