/ / -Weffc ++ aviso na estrutura simples com shared_ptr - c ++, c ++ 11

-Weffc ++ aviso em estrutura simples com shared_ptr - c ++, c ++ 11

Eu tento compilar um nó de árvore muito simples com std::shared_ptr. Nas minhas opções de compilador eu uso -Weffc++ e -Werror mas lança 2 erros que eu não entendo, portanto, não consigo imaginar uma solução.

O exemplo mínimo (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;
}

A saída do compilador é:

$ 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;
^

A única coisa parecida que eu pude encontrar é essa questão mas não responde a minha pergunta infelizmente.

Respostas:

0 para resposta № 1

Com o aviso C ++ efetivo ativado, o compilador avisa que você não seguiu a diretriz para preferir a inicialização explícita dos campos de membros na lista de inicializadores.

Adicionar um construtor explícito provavelmente se livrará disso:

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