This question already has an answer here:
- Default constructor with empty brackets 9 answers
This code doesn't behave how I expect it to.
#include<iostream>
using namespace std;
class Class
{
Class()
{
cout<<"default constructor called";
}
~Class()
{
cout<<"destrutor called";
}
};
int main()
{
Class object();
}
I expected the output 'default constructor called', but I did not see anything as the output. What is the problem?
Because the constructor never gets called actually.
Class object();
is interpreted as the declaration of a functionobject
taking no argument and returning an object ofClass
[by value]Try
Class object;
EDIT:
As Mike noticed this is not exactly the same code as what you are feeding to the compiler. Is the constructor/destructor
public
or isClass
a struct?However google for C++ most vexing parse.
Nope. Your line
Class object();
Declared a function. What you want to write isClass object;
Try it out.
You may also be interested in the most vexing parse (as others have noted). A great example is in Effective STL Item 6 on page 33. (In 12th printing, September 2009.) Specifically the example at the top of page 35 is what you did, and it explains why the parser handles it as a function declaration.
You can use it like this: