C++创建类对象方法和动态对象数组


创建类对象的方法

C++中有两种创建对象的方法,一种是直接声明,另一种则是使用new关键字,虽然作用相同,但是它们底层的存储方式却完全不同。在此之前,我们先了解一下C++程序的存储形式。
C++程序的内存格局通常分为四个区:
1. data area(全局数据区)
2. code area (代码区)
3. stack area (栈区)
4. heap area (堆区)

其中,堆区就是“自由存储区”,我们的new就是在堆区中申请内存的。回归正题,C++的第一种类对象的创建方法,直接声明:

#include <iostream> using namespace std; class Demo{ public: Demo(char* str) { name = str; cout << this->name << " come out" << endl; } private: string name; }; int main(){ Demo object1("object1"); } 
 
image

这种方法创建时,会在栈区开辟内存空间,这时内存管理由C++自己处理。但是,我们的栈区是有限的,而且一般空间不大,所以new就派上用场了!
一般来说,堆区的空间是足够大的,而在其中申请的内存空间,要由程序员自己管理。也就是说,当我们new一个变量之后,如果之后不用了,就必须手动delete,否则,就会造成内存泄漏。

用new方法创建对象的方法如下:

int main(){ //Demo object1("object1"); Demo *object2 = new Demo("object2"); delete object2; } 
 
image

创建动态对象数组

C++中,创建对象数组很简单,方法如下:

#include <iostream> using namespace std; class Demo{ public: Demo(){ cout << "A Demo..." << endl; } Demo(char* str) { name = str; cout << this->name << " come out" << endl; } private: string name; }; int main(){ Demo objs[10]; } 

但是,如果类没有默认构造方法,上面的方法就会报错,面对没有默认构造方法的类的对象数组的构造方法如下:

#include <iostream> using namespace std; class Demo{ public: /* Demo(){ cout << "A Demo..." << endl; } */ Demo(char* str) { name = str; cout << this->name << " come out" << endl; } private: string name; }; int main(){ // Demo objs[10]; // error; Demo *objs = new Demo[10]; Demo **objs = new Demo *[10]; for (int i = 0; i < 10; i++) { objs[i] = new Demo("object"); } } 


作者:FantasTowns
链接:https://www.jianshu.com/p/fe3559eee136
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM