问题标签 [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 投票
1 回答
81 浏览

c++ - (c++) stl 向量实现

我已经实现了一个简单的类似矢量的结构如果我使用它效果很好,vector<int>或者vector<char> 但是当我使用<vector<vector<int>>它时会出错我的代码中是否有关于矢量 stl 的良好实现代码或问题?

这是我的代码

0 投票
4 回答
117 浏览

c++ - “三原则”的执行出了问题

下面是我试图理解的“三法则”的错误实现。

调试程序时,我发现调试器有清理问题 int *k,可以通过int *k = nullptr在复制构造函数中定义或简单地将其设置为合理的值来解决。

但是,我不明白程序的结果错误(访问冲突)是如何产生的。

我知道,在复制赋值构造函数不再指向有效的内存地址v1之后。int *k

以下是上述程序的控制台输出:

0 投票
3 回答
390 浏览

c++ - 复制构造函数的“尝试引用已删除的函数”

我试图让我的头脑围绕 5 规则。

我有一个 class Renderable,它定义了一个自定义析构函数,所以它似乎是 5 规则的一个很好的候选者。这个类在它的构造函数中创建了一些资源,所以我的第一个想法是我应该防止复制:

我有另一个类,它在其构造函数的初始化列表中Unit创建一个:Renderable

我希望这会调用常规Renderable构造函数,但我得到了错误:

Renderable::Renderable(const Renderable &)':试图引用已删除的函数

为什么这试图调用复制构造函数?

我什至尝试在复制构造函数中添加调试行,但没有打印任何内容:

0 投票
2 回答
85 浏览

c++ - 使用复制构造函数创建对象(三类简单规则)会产生运行时错误

我有下面的简单程序:

我试图构建一个简单的三类规则。我在这条线上得到了 UB,Counter z{x};它应该调用复制构造函数。输出:

然后它重复ctor\ncctor...

自从我使用 C++ 以来已经有一段时间了。我只是找不到错误!

0 投票
1 回答
82 浏览

c++ - 哈希表 - 析构函数问题(未分配被释放的指针)

我有一个 HashTable,其中通过链接(链表)处理冲突。每个链表的第一个节点都有一个来自每个数组位置的指针。下面显示的是一个常规构造函数以及 3 个函数的规则。

尽管我的代码正在编译并且我的函数(添加、删除等)正在产生正确的输出,但我遇到了析构函数的问题(IDE 使用线程 1:信号 SIGABRT 指向它)并且控制台显示“指针正在在我的驱动程序完成运行后,未分配释放。我不知道出了什么问题,所以任何帮助将不胜感激。除了构造函数/析构函数之外,我没有包含任何其他函数(添加、删除等)的代码。

即使我注释掉复制和重载=构造函数,同样的问题仍然出现在析构函数中。

规格:

大4的实现:

构造函数:

析构函数(问题似乎出在哪里)

复制构造函数:

复制赋值运算符:

0 投票
3 回答
424 浏览

c++ - 智能指针如何影响 5 规则?

我了解到,当您在类中使用指针时,您应该实现规则 5。如果您不使用指针,那么您可以,实际上更可取的是使用默认值。但是,这如何与智能指针一起使用?例如,包含 的类int*可能如下所示:

但是如果我们使用智能指针,这样做就足够了吗?

0 投票
1 回答
105 浏览

c++ - 包含智能指针的类的复制构造函数

在下面的示例中,我们有一个Class包含一个Bridge对象的类,该对象为我们处理所有内存处理(三规则)。

现在,我刚刚了解了智能指针,并尝试使用unique_ptr. 据我了解,我们基本上不需要自己实现 3 规则,因为智能指针已经包含它。为了测试这一点,我做了以下示例:

正如您在上面的示例中所看到的,cSMRT2通过cSMRT复制构造函数进行初始化不起作用并给出了上述错误。

我不明白:为什么我可以Class像这样调用 的默认复制构造函数Class c1(c);,但不能调用ClassSMRT默认的复制构造函数ClassSMRT cSMRT2(cSMRT);

这表明我们在使用unique_ptr.

0 投票
1 回答
102 浏览

c++ - 用“= default”声明复制构造函数或根本不声明它有什么区别?

我试图了解各种功能的自动生成编译器代码的行为,例如:

  1. 析构函数
  2. 复制构造函数
  3. 赋值运算符
  4. 移动构造函数
  5. 移动赋值运算符

与未声明的情况相比,使用“= default”声明它们会导致任何功能差异吗?这个问题的答案在上面列出的函数中是否有所不同?如果没有功能差异,使用这两种情况的后果是什么?

使用“= default”声明的复制构造函数

未声明复制构造函数:

0 投票
2 回答
112 浏览

c++ - 分配内存 - 指针

我想知道何时或是否必须删除此对象。这是一个基本类 Object Object.cpp 的构造函数:

我知道在分配内存时应该在某个时候将其删除,但是我已经在构造函数中分配了内存并且想再次使用变量一和二。我什么时候删除它们?

0 投票
0 回答
24 浏览

c++ - 在 C++ 中创建模板实例化数组时“未分配被释放的指针”

我将简化问题以提供一个最小且可重现的示例:

我有一个类Polynomial,它只是一个系数数组的包装器。为了方便我的下游分析,最好将其编写为关于最大值的模板。可以代表的程度。请记住,N第-次多项式将保存N+1系数。

在我main的测试代码中,我创建了一个多项式,然后为它创建了一个大小的数组:

我收到以下内存错误:

实际上我的代码要复杂得多,但我尽可能多地注释掉,我真的看不出错误来自哪里(?)