c++三种实例化对象方式

1.隐式创建

首先我们定义一个测试类

class Person {
    private:
      int age;
      string name;
    public:
        Person() {
            cout<<"this is construct~";
        }
        Person(int age, string name) {
            this->age = age;
            this->name = name;
            cout<<"name is: "<<name<<", age is: "<<age<<endl;
        }
};

然后我们在main方法中隐式创建Person对象

Person p1;
cout<<endl;
Person p2(18, "lili");
cout<<endl;

2.显示创建

当然,我们也可以像其他编程语言一样,显示创建一个对象

Person p3 = Person();
cout<<endl;
Person p4 = Person(16, "xx");
cout<<endl;

这种方式,与上面的第一种方式原理基本一直。

3.用new创建

当然我们还可以用new关键字来创建对象

Person *p5 = new Person();
cout<<endl;
Person *p6 = new Person(14, "yy");

注意new出来的对象,都需要用指针接收。

4.上述三种方式的区别

上面三种方式可以认为是两种方式,因为第一种方式与第二种方式基本相同。那么具体区别在哪里?

1.new出来的对象必须要用指针接收,并且需要显式delete销毁对象释放内存。

2.内存位置不同。
对于隐式声明

Person p1;

p1对象位于栈空间。

Person *p5 = new Person();

p5对象位于堆空间。

3.内存分配时间不同
使用隐式创建对象的时候,创建支出就已经分配了内存。而使用new的方式,如果对象没有初始化,此时没有分配内存空间,也无法delete。

Person *p = NULL;
delete p;

上述语句如果执行,会有各种意想不到的情况发生。

4.隐式声明的对象是局部变量,出了函数就没有了。而new出来的指针对象可以在方法之间传递,且该指针对象所指向的堆中的对象实例仍然存在。

5.频繁调用场合并不适合new,就像new申请和释放内存一样。

  • 24
    点赞
  • 117
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值