问题标签 [rule-of-three]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
349 浏览

c++ - 链表:如何实现析构函数、复制构造函数和复制赋值运算符?

这是我的 C++ 代码:

我是 C++ 的初学者,在这段代码中,我练习如何合并两个链表。这实际上非常有效。我已经按排序顺序成功合并了两个链接列表。

但是,有人说我应该遵循C++的三法则。其中实现:DestructorCopy ConstructorCopy Assignment Operator

我看过很多关于那个的视频。我确实理解这基本上是处理浅拷贝,特别是当我们不希望两个不同的对象指向相同的内存地址时。但是,对于我的问题是,我仍然不知道如何在链接列表上工作的类上实现它,就像我上面的代码一样。

有人说,在我的 中main(),这段代码:l1.Merge(l2);不知何故不正确,因为我没有明确的复制构造函数。

如果你看我的Merge()函数,在最后一行,如果我没有这样做:b.last = NULL;b.first = NULL;,它只会破坏第二个链接列表的指针,编译器会给我警告:检测到双释放()

所以,我想我的问题是:

  1. 这段代码怎么会:l1.Merge(l2);与复制构造函数有关?
  2. Double free()因为我没有执行三法则吗?如果是,如何解决?
  3. 如何根据我的代码编写三法则?何时或如何使用它们?
  4. 根据本准则,有什么问题吗?如果我的程序只想合并链表,我还需要三法则吗?

谢谢你。我希望有人能像我10岁一样向我解释。并希望有人可以给我写一些代码。

0 投票
1 回答
69 浏览

c++ - 为无复制/无移动类型扩展的最小类是什么?

假设我想创建一些类来管理不应复制或移动的资源,这将是扩展和避免错误的最小类?

这个想法是,通过扩展类,我在0/3/5 规则的安全方面结束。

我有这个想法,这显然有效。