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


posted on 2012-11-18 21:52 阅读(4698) 评论(4)  编辑 收藏 引用 所属分类: c/c++基础知识

FeedBack:
# re: C++类中数据成员为类类型时,定义为对象还是定义为指针?[未登录]
2012-11-19 20:50 | anthony
本文不太完整,C++中还有引用,这种情况构造应该认为分配了空间,同时引用也支持多态,支持大数据类型。

另外,对象分配区域似乎意义不大,栈其实也是一种堆,并没有特别之处。  回复  更多评论
  
# re: C++类中数据成员为类类型时,定义为对象还是定义为指针?
2012-11-19 23:11 |
@anthony
你说的有道理,我这里只是简单介绍下,是在使用的时候有感而发,没有更深入的分析。
不过栈和堆对于底层分配来说区别不大,但对于开发者来说,还是需要注意的了。  回复  更多评论
  
# re: C++类中数据成员为类类型时,定义为对象还是定义为指针?
2012-11-21 15:31 | 让代码飞一会
如果为了减少编译依赖, 可以使用指针  回复  更多评论
  
# re: C++类中数据成员为类类型时,定义为对象还是定义为指针?
2012-11-21 16:13 | 岁月漫步
用指针会节省空间  回复  更多评论
  

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理



<2008年2月>
272829303112
3456789
10111213141516
17181920212223
2425262728291
2345678

常用链接

留言簿(17)

随笔分类(138)

随笔档案(137)

网络开发

最新随笔

搜索

  •  

积分与排名

  • 积分 - 493566
  • 排名 - 36

最新随笔

最新评论

阅读排行榜

评论排行榜