【C++】恼人的对象和指针

初学C++时:对象是对象,指针是指针。

掌握Java后:有些混乱的C++。

1. C++中创建对象的两种方式

就说Qt包装后的 QList<T> ,一个类似于 Java 中的 List<T>的容器。

1.1 创建命名对象

它既可以这么用:

QList<QString> myList;

myList.append(“hahaha”);

//该对象用完即弃,跟随调用函数一起被自动销毁,无需手动析构销毁


//此方式类似于 声明个 普通的命名对象,变量名 myList 即该对象的名称
//使用该对象名称即可使用该对象
//该对象是在栈内分配的内存,属于局部变量。
//所以包含该对象的函数一旦执行完毕,该对象也随之销毁,不用主动执行析构函数

1.2 创建指向匿名对象的指针

也可以这么用:

QList<QString> *pMyList = new QList<QString>();

pMyList->append("hahaha");

pMyList->~QList();      //最后万万记得主动调用析构函数,否则此内存泄露



//此方式是在 Heap 堆 中分配存储
//所以在用完后,需要使用主动执行析构函数释放该匿名对象占用的堆存储
//因为该对象无名无姓,没有登记在册
//指向该匿名对象的指针(局部变量)一旦被销毁了,那这个匿名对象就
//再也无法被找到和管理了,被人遗忘了,这点内存就泄露了。

其中,QString是 Qt包装后,类似Java的String类。

恼人。

第一种写法是:创建一个命名对象,然后使用该对象名称 使用该对象,类似于Java的引用,和Java写法一致。这才是面向对象的用法。

第二种写法是:创建指向一个匿名对象的指针,使用C++特有的指针概念去间接使用该对象。指针这玩意和面向对象一点关系都没有。

2. 二者的使用场景

既然C++创造了这两种不同的用法,自然有其原因。二者的用途不同。

2.1 对象指针的用途

2.1.1 实现多态

C++作为面向对象语言,必须要实现面向对象的一个重要特性:多态性。

只有指针才能实现 多态性,而普通的对象不行。

如果你用到多态性,那就只能创建对象指针,使用对象指针。

至于多态性是什么,你用的时候,自然会知道。如果你不了解,那说明你用不到,那就用 命名对象的方式创建即可。

2.1.2 传输复杂数据简单高效

在函数调用,传递较为复杂的对象时,使用指向对象的指针作为参数,会更高效。

因为不管你的对象多么复杂和庞大,使用指向该对象的指针,那么只需把指针值(永远都是4个字节大小)传给函数即可。如果用对象作为参数,传递占用的资源就比较大。

2.2 命名对象的用途

简单使用,用完即弃。

参考资料

1. C++ 类对象和 指针的区别

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

qilei2010

送我一张彩票中了平分

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值