请教:关于创建对象的弱智问题,高手勿入!
大家好:
我是个C++菜鸟。
现在我有一个关于new操作符创建对象的弱智问题,请大家帮忙解决:
//====================
class MyClass; //定义了一个我自己的类
…………
MyClass *pMyObj = new MyClass(); //创建对象的实例
pMyObj->field1 = 11; //访问成员
delete pMyObj; //释放对象
//====================
class MyClass; //定义了一个我自己的类
…………
MyClass MyObj; //这样为什么也能申明对象的实例?
//MyClass MyObj = new MyClass(); //这样就错了
MyObj.field1 = 11; //访问成员
//delete MyObj; //释放对象,错误,不能释放对象
//===========================================
看了刚才的代码,大家可能明白我的问题了:new操作符返回新空间的指针,delete删除由new分配的空间。那么,创建一个对象的时候,对象本身是一个什么样的东东呢?为什么可以在堆上分配空间,也可以在栈上分配空间?
我想,是否可以把对象看成一个包含成员变量和函数指针型成员变量的结构体。既然是结构体,那么就可以在堆上和栈上分配空间了。但是,如果按照第二种方式,对象的构造函数会自动地调用吗?析构函数又会在什么情况下被调用呢?
实在是搞不懂,请大家帮忙!谢谢!