存储
编译器会在{}开始出现的所有变量的空间.
构造器的调用只在创建对象时发生.
class X
{
public:
X(); //构造函数
};
X::X() //构造函数
{
}
void f(int i)
{
if(i<10)
{
goto jump1; //如果运行这行,x1的构造就没有做, f结束的时候x1是需要析构的。一个对象没有构造,所以没有办法析构.
}
X x1; //x1的空间,进了f就有了. 但是构造函数只有运行到这行才会做.
jump1:
switch(i)
{
case 1:
X x2;
break;
X x3;
break;
}
}
没有参数的构造函数(default constructor)
#include "stdafx.h"
#include <stdio.h>
class A
{
public:
int i;
A(int a);
~A();
void f();
};
A::A(int a)
{
i = a;
printf("A::A() -- this = %p\n", this);
}
A::~A()
{
printf("A::~A()\n");
}
void A::f()
{
this->i = 20;
printf("A::f()--&i=%p\n", &i);
printf("this=%p\n");
}
int main()
{
A a(1);
a.i = 10;
printf("&a=%p\n", &a);
printf("&a.i=%p\n", &(a.i));
A aa(2);
a.f();
printf("&aa=%p\n", &aa);
aa.f();
A y[2] = { A(1),A(2) };//程序是对的,调用2个构造函数
A yy[2] = { A(1)}; //程序出错,2个数组中存储的是对象,需要调用带参数的构造函数,只写了一个,所以会出错.
return 0;
}