在C++中返回具有空状态(NULL)的对象而不返回指针

kes*_*isb 2 c++ c++11

DOM(文档对象模型)规范中,接口Node有一个方法:

Node GetChild();
Run Code Online (Sandbox Code Playgroud)

它声明如果Node没有子节点,则返回值为NULL.在没有返回指向子节点的指针的情况下,在C++中实现此方法的正确方法是什么.(最好防止内存泄漏)

建议:

有一个属性

bool is_null_;
Run Code Online (Sandbox Code Playgroud)

和超负荷运营商布尔()返回该值.

Node child = node.GetChild();
if (child) { ... }
Run Code Online (Sandbox Code Playgroud)

Mic*_*ael 5

现在稍等一下,但是图书馆基础知识TS将提供std::experimental::optional.

否则,如果你可以使用boost::optional,它具有类似的语义.

您可以像以下一样使用它:

using std::experimental::optional;

optional<Node> GetChild();

auto child = node.GetChild();
if (child) {
  const Node& childNode = child.value();
} else {
  std::cerr << "parent had no child" << std::endl;
}
Run Code Online (Sandbox Code Playgroud)