Template Tipo de retorno com valor padrão
Então, ao escrever uma classe de modelo C ++, defini um método que retorna um objeto do tipo de modelo, da seguinte forma:
template <typename T>
class Foo
{
public:
T GetFoo()
{
T value;
//Do some stuff that might or might not set the value of 'value'
return value;
}
};
int main() {
Foo<int> foo;
foo.GetFoo();
return 0;
}
Isto dá o seguinte aviso:
prog.cpp: In member function ‘T Foo<T>::GetFoo() [with T = int]’:
prog.cpp:15: warning: ‘value’ is used uninitialized in this function
Entendo por que isso está acontecendo - estou retornando um @ não inicializaint
como parte deGetFoo
. O problema é que, se eu usasseFoo<SomeClass>
, a linhaT value;
inicializariavalue
usando o construtor padrão deSomeClass
.
Consegui suprimir este aviso, fazendo o seguinte:
T GetFoo()
{
T value = T();
//Do some stuff that might or might not set the value of 'value'
return value;
}
Isso parece funcionar para tipos primitivos (comoint
efloat
) e classes, pelo menos enquanto essa classe tiver um construtor padrão e um construtor de cópias. Minha pergunta é - essa é a maneira aceita de resolver esse problema? Existem efeitos colaterais disso que eu deveria conhecer?