美文网首页
C++对象创建两种方式

C++对象创建两种方式

作者: 哦小小树 | 来源:发表于2020-04-24 22:12 被阅读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为指针,这个指针的内容就是这个对象的内存所在。
理解为住宅区的地址。信息

相关文章

网友评论

      本文标题:C++对象创建两种方式

      本文链接:https://www.haomeiwen.com/subject/ienqwhtx.html