C++对象创建两种方式
2020-04-24 本文已影响0人
哦小小树
创建一个C++
对象根据其所在存储位置不同,创建的方式也不同。
一个C++
对象可以存放在:栈,堆中
示例对象
class ClassA
{
public:
int x;
ClassA(int x):x(x) {};
int& lessOne(int& a, int& b) const;
void changeValue() {
x = 2*x;
}
};
int& ClassA::lessOne(int& a, int &b) const
{
if (a > b) {
return a;
} else {
return b;
}
}
0x01 存储到栈中
操作方式
// 在栈上创建对象
// ClassName objName1, objName2(param)
ClassA a(11);
0x02 存储到堆中
操作方式
// 在堆上创建对象
// ClassName obj1 = new ClassName(param);
ClassA *b = new ClassA(13);
0x03 打印理解
// a是一个地址,地址为0x00007ffeefbff508
ClassA a(11);
/* b是一个指针,内容为:0x00000001005ace70 ,
指向堆,其地址为0x00007ffeefbff500
*/
ClassA *b = new ClassA(13);
// c地址为 0x00000001000030c8, c即为对象的首地址
static ClassA c(11);
// d被分配到了静态区 0x00000001005ab810, d是一个指针,指针内容为C的首地址
static ClassA *d = new ClassA(98);
/* f和d一样, f内容【指向】0x00000001000030c8;
但是f在栈中
*、
ClassA *f = &c;
总结:
ClassA a(11)
创建出来的对象,a就是这个对象是内存所在。
理解为住宅区;
ClassA *a = new ClassA(11)
a为指针,这个指针的内容就是这个对象的内存所在。
理解为住宅区的地址。信息