C++ //练习 13.23 比较上一节练习中你编写的拷贝控制成员和这一节中的代码。确定你理解了你的代码和我们的代码之间的差异(如果有的话)。

C++ Primer(第5版) 练习 13.23

练习 13.23 比较上一节练习中你编写的拷贝控制成员和这一节中的代码。确定你理解了你的代码和我们的代码之间的差异(如果有的话)。

环境:Linux Ubuntu(云服务器)
工具:vim

 

代码块
自己写的
class HasPtr{
public:
	HasPtr(const std::string &s = std::string()): ps(new std::string(s)), i(0) {}
	HasPtr(const HasPtr &);
	HasPtr &operator= (const HasPtr &);
	~HasPtr() { delete ps; }

private:
	std::string *ps;
	int i;
};

HasPtr::HasPtr(const HasPtr &h){
	ps = new string(*h.ps);
	i = h.i;
}

HasPtr::HasPtr &operator= (const HasPtr &h){
	ps = new string(*h.ps);
	i = h.i;
	return *this;
}
本书写的
class HasPtr{
    public:
    HasPtr(const string &s = string()): ps(new string(s)), i(0) {}
    HasPtr(const HasPtr &p): ps(new string(*p.ps)), i(p.i) {}
    HasPtr &operator= (const HasPtr &);
    ~HasPtr() { delete ps; }

    private:
    string *ps;
    int i;
};

HasPtr& HasPtr::operator= (const HasPtr &rhs){
    auto newp = new string(*rhs.ps);
    delete ps;
    ps =  newp;
    i = rhs.i;
    return *this;
}

差异应该在于释放ps指向的旧内存上,应该是释放原先的指向。

相关推荐

  1. 比武段PHP代码

    2024-04-25 17:36:01       38 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-25 17:36:01       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-25 17:36:01       106 阅读
  3. 在Django里面运行非项目文件

    2024-04-25 17:36:01       87 阅读
  4. Python语言-面向对象

    2024-04-25 17:36:01       96 阅读

热门阅读

  1. 【前端面试常问】MVC与MVVM

    2024-04-25 17:36:01       36 阅读
  2. opencv保存图片-------c++

    2024-04-25 17:36:01       28 阅读
  3. 基于FPGA的频率计与串口通信(二)

    2024-04-25 17:36:01       30 阅读
  4. C#Winform调用tcp/ip调用斑马打标机示例

    2024-04-25 17:36:01       64 阅读
  5. 抢占式SJF算法

    2024-04-25 17:36:01       38 阅读