Re: why Visual Studio can not optimize the initialization code?
Thanks Abhishek,
I do not know why in sample2, we still need to invoke copy constructor. Why
it is needed and not optimized to not invoke copy constructor at all? From
the MSDN output, we still need to invoke copy constructor once even if we
enable optimization -- /O2.
1. Output before optimization
A: I am in constructor
A: I am in constructor
B: I am in constructor
A: I am in copy constructor
B: I am in destructor
A: I am in destructor
A: I am in copy constructor
A: I am in destructor
A: I am in destructor
A: I am in destructor
2. Output after optimization
A: I am in constructor
A: I am in constructor
B: I am in constructor
A: I am in copy constructor
B: I am in destructor
A: I am in destructor
A: I am in destructor
A: I am in destructor
regards,
George
"Abhishek Padmanabh" wrote:
On Dec 19, 12:37 pm, George <Geo...@discussions.microsoft.com> wrote:
Hello everyone,
Why Visual Studio compiler can not optimize in this case? I think this case
is almost the same as sample 1, why compiler can optimize sample 1 but can
not optimze sample 2?
(sample 2,http://msdn2.microsoft.com/en-us/library/ms364057(vs.80).aspx)
What is not optimizing? Which portion in this sample were you
expecting to be optimized out but the compiler did not? (If you note
the sample correctly - there is an optimization!)
[Code]
#include <stdio.h>
class A {
public:
A() {printf ("A: I am in constructor\n");i = 1;}
~A() { printf ("A: I am in destructor\n"); i = 0;}
A(const A& a) {printf ("A: I am in copy constructor\n"); i = a.i;}
int i, x, w;};
class B {
public:
A a;
B() { printf ("B: I am in constructor\n");}
~B() { printf ("B: I am in destructor\n");}
B(const B& b) { printf ("B: I am in copy constructor\n");}};
A MyMethod()
{
B* b = new B();
A a = b->a;
delete b;
return (a);}
int main()
{
A a;
a = MyMethod();}
[/Code]