Is it possible to declare a variable in c++ without instantiating it? I want to do something like this:
Animal a;
if( happyDay() )
a( "puppies" ); //constructor call
else
a( "toads" );
Basially, I just want to declare a outside of the conditional so it gets the right scope.
Is there any way to do this without using pointers and allocating a
on the heap? Maybe something clever with references?
The best work around is to use pointer.
You can't use references here, since as soon as you'd get out of the scope, the reference would point to a object that would be deleted.
Really, you have two choices here:
1- Go with pointers:
2- Add an Init method to
Animal
:I'd personally go with option 2.
I prefer Greg's answer, but you could also do this:
I suggest this because I've worked places where the conditional operator was forbidden. (Sigh!) Also, this can be expanded beyond two alternatives very easily.
In addition to Greg Hewgill's answer, there are a few other options:
Lift out the main body of the code into a function:
(Ab)Use placement new:
You can't declare a variable without calling a constructor. However, in your example you could do the following:
You can't do this directly in C++ since the object is constructed when you define it with the default constructor.
You could, however, run a parameterized constructor to begin with:
Or you could actually use something like the
?: operator
to determine the correct string. (Update: @Greg gave the syntax for this. See that answer)