问题标签 [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.
c++ - 链表:如何实现析构函数、复制构造函数和复制赋值运算符?
这是我的 C++ 代码:
我是 C++ 的初学者,在这段代码中,我练习如何合并两个链表。这实际上非常有效。我已经按排序顺序成功合并了两个链接列表。
但是,有人说我应该遵循C++的三法则。其中实现:Destructor,Copy Constructor和Copy Assignment Operator。
我看过很多关于那个的视频。我确实理解这基本上是处理浅拷贝,特别是当我们不希望两个不同的对象指向相同的内存地址时。但是,对于我的问题是,我仍然不知道如何在链接列表上工作的类上实现它,就像我上面的代码一样。
有人说,在我的 中main()
,这段代码:l1.Merge(l2);
不知何故不正确,因为我没有明确的复制构造函数。
如果你看我的Merge()
函数,在最后一行,如果我没有这样做:b.last = NULL;
和b.first = NULL;
,它只会破坏第二个链接列表的指针,编译器会给我警告:检测到双释放()。
所以,我想我的问题是:
- 这段代码怎么会:
l1.Merge(l2);
与复制构造函数有关? - 是
Double free()
因为我没有执行三法则吗?如果是,如何解决? - 如何根据我的代码编写三法则?何时或如何使用它们?
- 根据本准则,有什么问题吗?如果我的程序只想合并链表,我还需要三法则吗?
谢谢你。我希望有人能像我10岁一样向我解释。并希望有人可以给我写一些代码。