问题标签 [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++向量丢失堆分配的指针
我在下面写了一个简单的程序来解释。
我希望as包含 3 个A实例。但是在调用第二次push_back
后,第一个元素
的指针x失去了它的引用(写入的虚拟值),并且在第 3 次迭代时抛出了异常。
这是在 for 循环之前添加as.reserve(3)解决的。
为什么会这样?
c++11 - Move assignment operator, move constructor
I've been trying to nail down the rule of 5, but most of the information online is vastly over-complicated, and the example codes differ.
Even my textbook doesn't cover this topic very well.
On move semantics:
Templates, rvalues and lvalues aside, as I understand it, move semantics are simply this:
As apposed to copying, which would be the equivalent of something like this:
No explanation of rvalues, lvalues or templates is necessary, I would go as far as to say those topics are unrelated.
The fact that the first example is faster than the second, should be a given. And I would also point out that any efficient code prior to C++ 11 will do this.
To my understanding, the idea was to bundle all of this behavior in a neat little operator move() in std library.
When writing copy constructors and copy assignment operators, I simply do this:
The equivalent, one would think, would be this:
I'm quite certain this won't work, so my question is: How do you achieve this type of constructor functionality with move semantics?
c++ - C++ 中的资源是什么?
关于这个话题:什么是复制和交换成语?
它指出一个类最多应该处理一种资源。资源是什么意思?
编辑:例如,我有一个类处理每个监视器的信息,并包含一个桌面像素数组。数组并且只有数组会被视为资源吗?保存监视器信息的监视器阵列和桌面像素阵列是否是另一个资源,需要另一个类?它在另一个班级,但这是什么意思?
我在这里和谷歌搜索过,但只找到与三规则或资源文件(*.rc 和 MSDN)相关的更多信息。没有什么与定义有关。
c++ - 需要建议在 c++ 中找到正确的 WrapperInterface 实现(三规则)
我试图找到一个界面的工作模式。
我在做什么的一些信息。我在 dx11 中实现了一个渲染引擎。我的目标是提供一个简单且高度接口的引擎,其中客户端不必具备任何 dx11 或高级渲染技术的知识。
我有我的引擎,该引擎提供了设置和创建任何对象、地形、太阳、照明、水、地平线和和和的功能。
现在我来回答我的问题。我所谓的引擎MeshController提供了这3个方法(代码被简化):
为了避免客户端处理指针,我尝试将其打包在一个包装类中,该类将执行 nullptr 检查,检查实体是否已被销毁或已创建等等。
包装:
现在我希望对象始终处于有效状态。如果实例在丢失包装对象之前没有被销毁,它会造成内存泄漏(不是真的,但是我的控制器会渲染它直到场景关闭,或者会阻塞一个实例槽,总而言之,客户端将失去对实例)。所以我的第一个想法是这样的:
由于三规则,我需要复制和赋值运算符。但是问题就来了。createInstance 和 destroyInstance 方法有很多开销,因为在场景中添加/删除,可能会重新创建渲染缓冲区......
所以现在我尝试找到任何方法来防止对象被破坏,如果它之前被复制过,或者如果它有一个有效的引用(指针)。这不是典型的动态内存分配,而是我的控制器中的某种分配。
客户端的典型用例:
谢谢你的帮助!
c++ - CppCoreGuidelines C.21 是否正确?
在阅读 Bjarne Stroustrup 的 CoreCppGuidelines 时,我发现了一个与我的经验相矛盾的指南。
C.21需要以下内容:
如果您定义或
=delete
任何默认操作,请定义或=delete
全部
原因如下:
特殊函数的语义密切相关,因此如果需要非默认,则很可能其他函数也需要修改。
根据我的经验,重定义默认操作最常见的两种情况如下:
#1:使用默认主体定义虚拟析构函数以允许继承:
#2:定义默认构造函数,对 RAII 类型的成员进行一些初始化:
根据我的经验,所有其他情况都很少见。
你怎么看这些例子?它们是 C.21 规则的例外,还是最好在此处定义所有默认操作?还有其他常见的例外吗?
c++ - 如何用它的成员编写一个类是一个指向自己定义类的指针向量
我是 C++ 新手,我正在尝试编写一个 CarRental 类,其中包含一个指向基类 Car 的指针向量。这是汽车类。
我需要编写一个 CarRental 类,其中包含用于存储汽车的容器。例如,
我怀疑我写的 CarRental 类是否正确。我正在考虑是否需要编写自己的复制构造函数。到了大三,我还需要赋值运算符和析构函数吗?三个会不会有内存泄漏?异常安全性如何?
c++ - 正常块后检测到堆损坏 (#181)
(首先对不起英语,因为我不擅长它)
我已经为幻方编写了一个代码,它可以正常工作并给出真正的平方。
当它被编译并且我运行程序时,没有任何问题。
但是当它到达时return 0
我main()
得到这个错误
正常块后检测到堆损坏 (#180)
我搜索了一下,发现我的square
班级没有遵守三规则(什么是三规则?)
所以我试了一下,又得到了错误。
这是我的代码。
不是关于问答,这是编辑后的代码,这里是运行新代码的链接 http://cpp.sh/72mmg
c++ - 链表复制构造函数崩溃程序
我不确定为什么我的复制构造函数似乎使程序崩溃,所有其他函数在链表类中都很好。5 规则现在真的让我对实施感到困惑。如果有人对我出错的地方有一些指示或指导,请告诉我,谢谢。
DList ctor:
析构函数和复制构造函数:
主要的:
崩溃前的输出:
c++ - C++11 中的 3 条默认成员弃用规则
根据下面广为人知的表格,当复制赋值、复制构造函数和析构函数中的一个或多个由用户提供时(红色单元格表示弃用)。鉴于“3 规则”,这是完全合理的。但是,该表显示,在用户提供的复制构造函数/赋值的情况下,默认析构函数的生成不会被弃用。
这个设计决定背后的理由是什么?
c++ - 为什么删除 Actor 指针会导致“Program.exe 已触发断点”
我正在尝试创建一个Actor
指向另一个Actor
对象的指针,如下所示:
然后,当我尝试时delete ptr
,它会导致运行时错误:
Program.exe 已触发断点
但是,当我创建一个新Actor
的而不是分配ptr
给 的引用时other
,我可以安全地delete
使用它而不会出现任何错误:
我不明白问题是什么。
这是我的Actor
班级的样子:
演员.h:
演员.cpp:
我已经搜索过,发现了The Rule of Three,但我不明白在设置这样的指针时使用了什么运算符:
我认为它是复制构造函数,但是如何为我的程序实现它呢?