- 使用shared_ptr对简单结构进行Weffc ++警告

时间:2016-04-23 09:16:22

标签: c++ c++11

我尝试使用std::shared_ptr编译非常简单的树节点。在我的编译器选项中,我使用-Weffc++-Werror,但它会抛出2个我不理解的错误,因此我无法想象解决方案。

最小的例子( t.cpp ):

#include <memory>

struct node {
    std::shared_ptr<node> left;
    std::shared_ptr<node> right;
    std::shared_ptr<int> value;
};

int main() {
    node n;
    return 0;
}

编译器的输出是:

$ LANG=en_US g++ -std=c++14 -Weffc++ t.cpp
t.cpp: In constructor 'constexpr node::node()':
t.cpp:3:8: warning: 'node::left' should be initialized in the member initialization list [-Weffc++]
 struct node {
        ^
t.cpp:3:8: warning: 'node::right' should be initialized in the member initialization list [-Weffc++]
t.cpp:3:8: warning: 'node::value' should be initialized in the member initialization list [-Weffc++]
t.cpp: In function 'int main()':
t.cpp:10:10: note: synthesized method 'constexpr node::node()' first required here 
     node n;
          ^

我能找到的唯一类似的事情是this question,但不幸的是,它没有回答我的问题。

1 个答案:

答案 0 :(得分:0)

启用Effective C ++警告后,编译器会警告您没有遵循指南,而是希望在初始化列表中显式初始化成员字段。

添加显式构造函数可能会解决这个问题:

node() : left(), right(), value()
{}