That's a matter of how smart the compiler optimizes the code. If the compiler is "dumb", there would be up to 4 constructor callings. A smart compiler would detect that the code does nothing and optimizes all stuff away.
#include <iostream>
class Apple
{
public:
Apple() { std::cout << "Hello!\n"; }
};
Apple func()
{
Apple w;
return w; // Ahem: "return", not "Return"
}
int main() // Ahem: "int main()", not "void main()"
{
Apple x;
Apple y;
Apple z;
z = func();
}