声明对象指针时会调用构造函数吗?
声明对象指针时不会调用构造函数,指针只是个特殊的变数而已。
对象声明可以有两种:
a. 通过 类名 对象名;声明, 该声明后得到的对象已经隐式默认初始化了,分配了内存地址,并且已经存有了默认初始化后的类成员初始化值。例如 FirstStruct test; 之后就可以对FirstStruct的成员变量进行访问了: test.age.push_back(15);
b. 通过对象指针来声明,类名 *对象指针名; 通过指针申明的对象没有初始化,只是分配了一个指针名,并没有进行初始化,即没有分配内存空间,所以需要用 new 进行初始化操作。 FirstStruct *ptest; test->push_back(30);是错误的, 必须在声明对象后,new初始化, 对象指针可以用 new初始化,也可以用其他同类对象的引用来初始化,参见c。FirstStruct *ptest; ptest = new FirstStruct(); ptest->age.push_back(10);
c. 也可以将同一个类对象的引用 赋给指针对象,例如: FirstStruct test; FirstStruct *ptest = &test; 之后就可以通过指针ptest ->age.push_back(40); 直接对test对象的成员变量进行操作了。
d. 声明的指针的类型必须与所要指向对象/变量的地址内所存的类型一致。例如: bool *pbool = &test.age.push_back(15); 是错的,因为test.age是int型 vector, 而bool型的指针不能指向一个int型vector变量的地址,bool *pbool = &test.sexual;则可以,pbool就指向了test对象的bool型成员变量sexual的地址了.