C++类中数据成员为类类型时,定义为对象还是定义为指针?

转载 2015年07月11日 10:47:33
C++中,ClassTest objTest;就已经构造了对象,分配了空间;而在C#,Java中ClassTest objTest;只是声明,并没有分配空间。
在C++中,ClassTest objTest;是在栈上分配空间,ClassTest *pobjTest = new ClassTest;是在堆上分配空间。
栈分配的空间自动回收,堆分配的空间需要手动回收。
那么对于C++类中数据成员为类类型时,定义为对象还是定义为指针,用哪种方法,并没有绝对的情况,需要根据具体情况具体分析。
本质上是对象分配区域的问题,前者是在栈(stack)上分配空间,后者是在堆(heap)上分配空间。
一般来说,可以定义为对象,在如下情况考虑把数据成员定义成指针,
1)有多态的情况;会用到虚函数,基类指针
2)可能和别的类共享,或者只是引用别的类里的某个对象,所以生命周期不是很确定(这个可以考虑智能指针)
3)大数据类,如果定义成对象,会导致当前对象无法在栈内创建
举报

相关文章推荐

为什么C++类定义中,数据成员不能被指定为自身类型,但可以是指向自身类型的指针或引用?

从对象构造的角度理解“数据成员不能被指定为自身类型,但可以是指向自身类型的指针或引用”

为什么C++类定义中,数据成员不能被指定为自身类型,但可以是指向自身类型的指针或引用?

为什么C++类定义中,数据成员不能被指定为自身类型,但可以是指向自身类型的指针或引用?为什么在类体内可以定义将静态成员声明为其所属类的类型呢 ? 原文链接:http://www.cnbl...

精选:深入理解 Docker 内部原理及网络配置

网络绝对是任何系统的核心,对于容器而言也是如此。Docker 作为目前最火的轻量级容器技术,有很多令人称道的功能,如 Docker 的镜像管理。然而,Docker的网络一直以来都比较薄弱,所以我们有必要深入了解Docker的网络知识,以满足更高的网络需求。

类的成员函数参数定义为类的对象(匿名对象)

class myclass { public: myclass(int a) { cout<<a<<"Constructor!"<<endl; x=a; } void show(myc...

C++笔记_类和对象_类的定义_数据成员与成员函数

类的定义 数据成员与成员函数 c++扩展了结构体的概念,使之可以包含 函数 作为成员。结构体内的函数被称为"成员函数",结构体中的数据则成为"数据成员"。这种结构体被称为类。   coding...

C++类的基础知识

类是面向对象程序设计的核心,是通过抽象数据类型方法实现的一种用户自定义数据类型,它同时包含了数据和对数据进行操作的函数。利用类可以实现数据的封装和隐藏。类是对某一类对象的抽象,而对象是某一种类的实例。...

map 自定义类型作为键值

作为一个计算机专业的学生,一直没有深入的学习过map真是罪过罪过! 今天终于对map的insert机制做了一点研究,弄明白了如何用自定义类型作为键值了。              网上...

Dictionary使用自定义类型为KEY

Dictionary作为字典进行索引取值时的效率相比List的遍历查找要好很多,然而有时淡出的int,string等作为关键值索引并不够使用,需要自定义类型来作为KEY,对于自定义的类型作为KEY,要...
  • suifcd
  • suifcd
  • 2016-07-22 19:47
  • 1941

hash_map的key为自定义类型

说来惭愧,使用了很久Visual Stdio 2003了,只知道MFC升级到了7.0,ATL也升级到了7.0,对于这两个经典的类库做了一些研究,但一直没有注意C++标准库的变化。      今天尝试的...

定义类成员

Reference:BEGINNING C#                   Karli Watson, Marco...

C++: 为数据类型定义别名的方式

C++: 为数据类型定义别名的方式标签: C++ 定义别名 #define typedefby 小威威在C++中,为数据类型定义别名有两种方式:第一种就是用宏定义(#define),第二种方法就是用...
  • linwh8
  • linwh8
  • 2016-03-17 23:56
  • 1086
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)