- 1、本文档共11页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
C管理类的指针成员
【c++】类管理指针成员c++编程提倡使用标准库,一个原因是标准库大胆减少对指针的使用。但是许多程序是离不开指针的。包含指针的类需要特别注意复制控制,原因是复制指针时只复制指针中的地址,而不复制指针所指向的对象。这样当把一个对象复制给另一个对象后,当改变一个对象后,另一个对象也会收到牵连。另外一个对象释放掉后,其指针已经被释放掉。而另一个对象还不知道,其实该对象中的指针已经成为悬垂指针。这样再操作就会出现错误。1. 定义智能指针类原理:定义一个计数的类,所有复制的都是指向这一个类,每复制一次,该类加1一次;每析构一次,该类减1一次。当次数为0时,释放掉动态申请的空间。图例:1)定义一个对象?2)复制一个对象#include iostream#include stringusingnamespace std;class HasPtr;//定义计数类class U_Ptr{ //没有访问标号,默认为private,保证类的隐私,但是友员类可以随意访问(包括private) friend class HasPtr; U_Ptr(int *p) : ip(p), use(1) {} ~U_Ptr() { cout hello use endl; delete ip; }int *ip; size_t use; //次数};class HasPtr{public: HasPtr(int *p, int v) : ptr(new U_Ptr(p)), val(v) {} HasPtr(const HasPtr orig) : ptr(orig.ptr), val(orig.val) { ++ptr-use; } HasPtr operator=(const HasPtr orig); ~HasPtr() { cout hahha:: ptr-use endl; if(--ptr-use == 0) delete ptr; }private: U_Ptr *ptr;int val;};HasPtr HasPtr::operator=(const HasPtr orig){ ++orig.ptr-use;if(--ptr-use == 0) delete ptr; ptr = orig.ptr; val = orig.val;return *this;}int main(){int i = 56, j = 12;int *p = newint(56); HasPtr hasptr(p, j); HasPtr hasptr2(hasptr);}2. 定义值型类给指针成员提供语义值。具有值语义的类所定义的对象,其行为很像算术类型的对象:复制值型对象时,会得到一个不同的版本。对副本的改变不会反映在原有对象上。#include iostream#include stringusingnamespace std;class HasPtr{public: HasPtr(constint p, int v) : ptr(newint(p)), val(v) {} HasPtr(const HasPtr orig) : ptr(newint(*orig.ptr)), val(orig.val) { } //复制值型对象时,会得到一个不同的版本 HasPtr operator=(const HasPtr orig); ~HasPtr() { delete ptr; }private:int *ptr;int val;};HasPtr HasPtr::operator=(const HasPtr orig){ *ptr = *orig.ptr; //赋值时,只改变指针指向的值,但是指针是不变的 val = orig.val;return *this;}int main(){int i = 56, j = 12; HasPtr hasptr(i, j); HasPtr hasptr2(hasptr); hasptr2 = hasptr;}C++管理类的指针成员分类:?C++编程语言2012-11-30 09:41?2293人阅读?评论(1)?收藏?举报c++C++智能指针类的指针成员管理目录(?)[+]C++类的指针成员与其他成员有所不同,指针成员指向一个内存地址,该地址的内存需要
您可能关注的文档
最近下载
- 质量保证组织机构框图.doc VIP
- 2024《高中思想政治课活动型课堂存在的问题及完善对策研究》8500字.docx
- 清洗猪舍合同8篇.docx VIP
- 义务教育版(2024)五年级信息科技 第23课 兔子增长有规律(2) 教案.docx VIP
- 支原体肺炎的病理特征与影像学表现.pptx
- 兔子增长有规律(1)(教学设计)-2024-2025学年人教版(2024)小学信息技术五年级全一册.docx VIP
- BS EN 10269-2013 用于具有特定升高和_或低温性能的紧固件的钢和镍合金.pdf
- 物流合同模板6篇.docx VIP
- 八达 400馈电最全图文讲解.pdf
- 二年级下册每日练字.pdf
文档评论(0)