问题标签 [deleted-functions]
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++ - 派生类在基类中删除时是否会有隐式复制构造函数或赋值运算符?
Qt定义Q_DISABLE_COPY
如下:
Q_DISABLE_COPY
在QObject
class中使用,但它的文档说它也应该在其所有子类中使用:
当您创建自己的QObject子类(直接或间接)时,不应给它一个复制构造函数或赋值运算符。然而,仅仅从你的类中省略它们可能是不够的,因为如果你错误地编写了一些需要复制构造函数或赋值运算符的代码(这很容易做到),你的编译器会精心为你创建它。你必须做得更多。
但是考虑这个程序:
尝试编译该程序的错误似乎表明,当在基类中删除派生类时,编译器不会在派生类中创建复制构造函数或赋值运算符。Qt 的文档在这方面是错误的,还是在创建它们时存在一些极端情况?
相关但不重复:在 QObject 派生类中重复 Q_DISABLE_COPY。它给出了在类中使用它可能有用的原因,Q_DISABLE_COPY
即使它无论如何都不可复制,但并不能确认没有它它实际上永远不可复制。
c++ - 是否可以使用 free 释放通过 new 创建的动态对象?
我知道 C++ 允许创建一个带有已删除或不可访问的析构函数的类:
现在可以创建一个动态对象,但它会泄漏。
我们知道我不应该
delete
使用 withfree
和new
withmalloc
但我们可以将任何类型的指针转换为指向的指针void
:无效* p = (无效*)pf; 免费(p);
现在可以安全地释放
pf
via指向的动态对象,free
然后再转换为void*
?如果它不安全,那么如果我的类已删除
dtor
,则无法释放在免费商店中分配的对象?
c++ - C++ 入门第 5 版:Synthesized Move 构造函数作为删除和复制构造函数
我在 C++ 入门第 5 版的最后一个附录中。(解决方案部分):
这是那里的一个例子:
假设
Y
是一个定义了自己的复制构造函数但没有移动构造函数的类
我添加了以下定义struct Y
:
当我运行程序时,它工作得很好,并且不会抱怨
hasY
删除的移动构造函数。我得到输出:所以我认为这是可行的,因为类型
Y
的对象是通过复制构造函数移动的,而不是相反的。因此调用hasY
'move-ctor 调用Y
'move-ctor 被删除然后编译器使用Y
'copy-ctor 移动该元素。我对吗?引导我。谢谢!
c++ - 错误:使用已删除的函数 std::unique_ptr
我正在尝试将 unique_ptr 传递给自定义矢量类,但我收到主题标题中的错误。
我知道您无法复制 unique_ptr ,因此我在传递它时尝试使用 std::move() ,但这似乎并不能解决我的问题......我哪里出错了?
提前致谢
编辑:将 'const' 添加到 'Add(const T& v)'
c++ - 调用递归函数时出现编译器错误 - “试图引用已删除的函数”
我正在尝试使用递归函数将二叉树写入文件。调用writeFile(std::string fileName)
打开文件流,然后将其传递给递归函数调用,writeFile(BinNode<T> ptr, std::ofstream outFile)
. 当第一个函数调用第二个函数时,编译器返回错误“尝试引用已删除的函数”(在我的代码中注明的行。我研究了错误代码,我有一个默认构造函数,一个析构函数,所以没有一个函数是隐含的任何想法将不胜感激。
BinTree.h:
BinTree.template:
BinNode.h:
c++ - C++ 中已删除函数模板的显式实例化
如果函数模板被标记为已删除,是否允许像示例中那样显式实例化它:
Clang 和 GCC 允许它,而 MSVC 打印错误:
演示:https ://gcc.godbolt.org/z/49hfqnr4f
哪个编译器在这里?
c++ - 通过 C++ 编译器查找特定的函数调用
我有一个很大的代码库,想找到对特定标准或第三方库函数的调用。如果函数的名称不是很独特,并且还可以作为变量名称和内部注释出现,则很难使用文本搜索来实现。如果库函数被重载,则会出现额外的复杂情况,并且必须找到许多重载中的一个。最好不要修改库。
我发现的一种方法是删除感兴趣的函数,这将导致在调用它的每个地方都出现编译错误(并且在没有此类调用的情况下不会出现错误)。例如,如果要查找所有调用sqrt(float)
但全部跳过sqrt(double)
,则解决方案如下:
该解决方案实际上是基于删除已声明函数的非标准能力。它适用于 Clang 和 MSVC,但不适用于 GCC。演示:https ://gcc.godbolt.org/z/9h3jGMjWc
是否有实现相同目标的标准方法?
c++ - 可以删除在 C++ 中返回不完整类型的函数吗?
在以下示例中,f()
返回不完整类型的函数A
被标记为已删除:
它被 GCC 接受,但不在 Clang 中,它抱怨:
演示:https ://gcc.godbolt.org/z/937PEz1h3
根据标准,哪个编译器在这里?
c++ - 我应该将删除的成员函数放在 uml 类图中吗?
我是否应该将已删除的方法或成员函数放在 UML 类图中,例如,对于这样的类: