Seems like this would be a duplicate, but maybe it is just so obvious it hasn\'t been asked...
Is this the proper way of checking if a variable (not pointer) is init
With C++-11 or Boost libs you could consider storing the variable using smart pointers. Consider this MVE where toString()
behaviour depends on bar
being initialized or not:
#include
#include
class Foo {
private:
std::shared_ptr bar;
public:
Foo() {}
void setBar(int bar) {
this->bar = std::make_shared(bar);
}
std::string toString() const {
std::ostringstream ss;
if (bar) // bar was set
ss << *bar;
else // bar was never set
ss << "unset";
return ss.str();
}
};
Using this code
Foo f;
std::cout << f.toString() << std::endl;
f.setBar(42);
std::cout << f.toString() << std::endl;
produces the output
unset
42