问题标签 [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++) stl 向量实现
我已经实现了一个简单的类似矢量的结构如果我使用它效果很好,vector<int>
或者vector<char>
但是当我使用<vector<vector<int>>
它时会出错我的代码中是否有关于矢量 stl 的良好实现代码或问题?
这是我的代码
c++ - “三原则”的执行出了问题
下面是我试图理解的“三法则”的错误实现。
调试程序时,我发现调试器有清理问题 int *k
,可以通过int *k = nullptr
在复制构造函数中定义或简单地将其设置为合理的值来解决。
但是,我不明白程序的结果错误(访问冲突)是如何产生的。
我知道,在复制赋值构造函数不再指向有效的内存地址v1
之后。int *k
以下是上述程序的控制台输出:
c++ - 复制构造函数的“尝试引用已删除的函数”
我试图让我的头脑围绕 5 规则。
我有一个 class Renderable
,它定义了一个自定义析构函数,所以它似乎是 5 规则的一个很好的候选者。这个类在它的构造函数中创建了一些资源,所以我的第一个想法是我应该防止复制:
我有另一个类,它在其构造函数的初始化列表中Unit
创建一个:Renderable
我希望这会调用常规Renderable
构造函数,但我得到了错误:
Renderable::Renderable(const Renderable &)':试图引用已删除的函数
为什么这试图调用复制构造函数?
我什至尝试在复制构造函数中添加调试行,但没有打印任何内容:
c++ - 使用复制构造函数创建对象(三类简单规则)会产生运行时错误
我有下面的简单程序:
我试图构建一个简单的三类规则。我在这条线上得到了 UB,Counter z{x};
它应该调用复制构造函数。输出:
然后它重复ctor\ncctor
...
自从我使用 C++ 以来已经有一段时间了。我只是找不到错误!
c++ - 哈希表 - 析构函数问题(未分配被释放的指针)
我有一个 HashTable,其中通过链接(链表)处理冲突。每个链表的第一个节点都有一个来自每个数组位置的指针。下面显示的是一个常规构造函数以及 3 个函数的规则。
尽管我的代码正在编译并且我的函数(添加、删除等)正在产生正确的输出,但我遇到了析构函数的问题(IDE 使用线程 1:信号 SIGABRT 指向它)并且控制台显示“指针正在在我的驱动程序完成运行后,未分配释放。我不知道出了什么问题,所以任何帮助将不胜感激。除了构造函数/析构函数之外,我没有包含任何其他函数(添加、删除等)的代码。
即使我注释掉复制和重载=构造函数,同样的问题仍然出现在析构函数中。
规格:
大4的实现:
构造函数:
析构函数(问题似乎出在哪里)
复制构造函数:
复制赋值运算符:
c++ - 智能指针如何影响 5 规则?
我了解到,当您在类中使用指针时,您应该实现规则 5。如果您不使用指针,那么您可以,实际上更可取的是使用默认值。但是,这如何与智能指针一起使用?例如,包含 的类int*
可能如下所示:
但是如果我们使用智能指针,这样做就足够了吗?
c++ - 包含智能指针的类的复制构造函数
在下面的示例中,我们有一个Class
包含一个Bridge
对象的类,该对象为我们处理所有内存处理(三规则)。
现在,我刚刚了解了智能指针,并尝试使用unique_ptr
. 据我了解,我们基本上不需要自己实现 3 规则,因为智能指针已经包含它。为了测试这一点,我做了以下示例:
正如您在上面的示例中所看到的,cSMRT2
通过cSMRT
复制构造函数进行初始化不起作用并给出了上述错误。
我不明白:为什么我可以Class
像这样调用 的默认复制构造函数Class c1(c);
,但不能调用ClassSMRT
默认的复制构造函数ClassSMRT cSMRT2(cSMRT);
?
这表明我们在使用unique_ptr
.
c++ - 用“= default”声明复制构造函数或根本不声明它有什么区别?
我试图了解各种功能的自动生成编译器代码的行为,例如:
- 析构函数
- 复制构造函数
- 赋值运算符
- 移动构造函数
- 移动赋值运算符
与未声明的情况相比,使用“= default”声明它们会导致任何功能差异吗?这个问题的答案在上面列出的函数中是否有所不同?如果没有功能差异,使用这两种情况的后果是什么?
使用“= default”声明的复制构造函数
未声明复制构造函数:
c++ - 分配内存 - 指针
我想知道何时或是否必须删除此对象。这是一个基本类 Object Object.cpp 的构造函数:
我知道在分配内存时应该在某个时候将其删除,但是我已经在构造函数中分配了内存并且想再次使用变量一和二。我什么时候删除它们?
c++ - 在 C++ 中创建模板实例化数组时“未分配被释放的指针”
我将简化问题以提供一个最小且可重现的示例:
我有一个类Polynomial
,它只是一个系数数组的包装器。为了方便我的下游分析,最好将其编写为关于最大值的模板。可以代表的程度。请记住,N
第-次多项式将保存N+1
系数。
在我main
的测试代码中,我创建了一个多项式,然后为它创建了一个大小的数组:
我收到以下内存错误:
实际上我的代码要复杂得多,但我尽可能多地注释掉,我真的看不出错误来自哪里(?)