Inicjalizacja zmiennych w plikach nagłówkowych budzi we mnie wiele wątpliwości.
- Czy jeśli w pliku
.hpp
mamint x = 0
i w konstruktorze redefiniuję tę wartość to czy jest to zero-cost? - Czy taka samo inicjalizować skomplikowane obiekty?
- Czy w konstruktorze mimo wszystko powinienem definiować te wartości?(w kodzie lepiej widać co mam na myśli)
kod do zobrazowania problemów:
class Foo
{
public:
// Foo(int x) : x(x) {} // alokacja->inicjalizacja x, czy alokacja->inicjalizacja x->inicjalizacja x?
Foo(int x = 0, ComplexObject obj = ComplexObject{}) : x(x), obj(obj) {} // `ComplexObject obj = ComplexObject{}` jest to już zdefiniowane wcześniej.
// konstruktory na górze czy na dole lepsze?
Foo() = default;
Foo(int x) : x(x) {}
Foo(int x, ComplexObject obj) : x(x), obj(obj) {}
private:
ComplexObject obj{};
ComplexObject obj1 = ComplexObject(1, 3); // Zwiazane z pytaniem 1 i 2, czy jest to zero-cost?
ComplexObject obj2;
int x = 0;
};