C++ Primer 第五版 中文版 练习 13.27 个人code
2014-10-06 11:13
411 查看
C++ Primer 第五版 中文版 练习 13.27
题目:定义你自己的使用引用计数版本的HasPtr。
答:
HasPtr.h
HasPtr.cpp
题目:定义你自己的使用引用计数版本的HasPtr。
答:
HasPtr.h
#pragma once #include <string> class HasPtr { public: //构造分配新的string和新的计数器,将计数器置为1 HasPtr(const std::string &s = std::string()) :ps(new std::string(s)), i(0), use(new std::size_t(1)) {} //拷贝构造函数拷贝所有三个数据成员,并递增计数器 HasPtr(const HasPtr &p) :ps(p.ps), i(p.i), use(p.use) { ++*use; } //拷贝赋值运算符 HasPtr& operator=(const HasPtr&); //析构函数 ~HasPtr(); private: std::string *ps; int i; std::size_t *use; //共享计数器用来记录有多少个对象共享*ps的成员 };
HasPtr.cpp
#include "HasPtr.h" HasPtr::~HasPtr() { if (--*use) //如果引用计数器变为0 { delete ps; //释放string内存 delete use; //释放计数器内存 } } HasPtr& HasPtr::operator=(const HasPtr &rhs) { ++*rhs.use; //递增右侧运算对象的引用计数 if (--*use == 0) //递减本对象的引用计数 { delete ps; //没有其它用户则释放ps和use delete use; } ps = rhs.ps; //从rhs拷贝数据到本对象 i = rhs.i; use = rhs.use; return *this; //返回本对象 }
相关文章推荐
- C++ primer 第五版 中文版 练习 9.3 & 练习 9.4 个人 code
- C++ primer 第五版 中文版 练习 10.14 个人code
- C++ primer 第五版 中文版 练习 10.18 个人code
- C++ primer 第五版 中文版 练习 10.30 个人code
- C++ primer 第五版 中文版 11.3.1 节练习 个人code
- C++ primer 第五版 中文版 练习 12.20 个人code
- C++ primer 第五版 中文版 练习 9.50 个人code
- C++ primer 第五版 中文版 练习 10.15 个人code
- C++ primer 第五版 中文版 练习 10.21 个人code
- C++ primer 第五版 中文版 练习 12.23 个人code
- C++ primer 第五版 中文版 练习 10.20 个人code
- C++ primer 第五版 中文版 练习 10.22 个人code
- C++ primer 第五版 中文版 练习 10.25个人code
- C++ Primer 第五版 中文版 练习 13.13 个人code
- C++ Primer 第五版 中文版 练习 13.23 个人code
- C++ Primer 第五版 中文版 练习 13.39 个人code
- C++ primer 第五版 中文版 练习 10.24个人code
- C++ primer 第五版 中文版 练习 10.27个人code
- C++ primer 第五版 中文版 练习 10.37 个人code
- C++ Primer 第五版 中文版 练习 14.3 个人code