247得票3回答
“=default”和“{}”在默认构造函数和析构函数中有何不同?

我最初将这个问题仅限于析构函数,但现在我要考虑默认构造函数。以下是原始问题: 如果我想给我的类一个虚拟的析构函数,但与编译器生成的相同,我可以使用=default:class Widget { public: virtual ~Widget() = default; }; 但是使...

168得票7回答
错误:使用已删除的函数

我一直在处理一个朋友写的C++代码,当我使用gcc4.6进行编译时,出现了以下错误,这是我从未见过的:error: use of deleted function ‘GameFSM_<std::array<C, 2ul> >::hdealt::hdealt()’ is...

43得票2回答
C++中能否删除返回不完整类型的函数?

在下面的例子中,返回不完整类型A的函数f()被标记为已删除: struct A; A f() = delete; 它被GCC所接受,但在Clang中会出现错误: error: incomplete result type 'A' in function definition 演示:...

41得票5回答
删除复制构造函数和复制赋值运算符 - 公共的,私有的还是受保护的?

为了使一个对象不可复制,我们可以显式删除它的复制构造函数和赋值运算符。我的问题是:在类的公共、私有或保护部分中哪个是正确的位置?这个选择会有什么影响吗?

34得票3回答
默认移动构造函数/赋值运算符和删除的复制构造函数/赋值运算符

根据标准,如果类X的定义没有明确声明移动构造函数,则只有在以下情况下默认声明为删除: — X没有用户声明的复制构造函数, — X没有用户声明的复制赋值运算符, — X没有用户声明的移动赋值运算符,以及 — X没有用户声明的析构函数。 现在以下内容编译失败:# include <utili...

24得票2回答
删除复制构造函数和复制赋值运算符。它们中哪一个是必要的?

我有一个使用情况,我的对象绝不能以任何方式被复制。我写了一个夸张的完整的复制构造函数和复制赋值运算符删除列表。有这么多的东西,我无法确定该使用哪些,有时这使我非常焦虑。我不需要在我的代码中编写所有这些内容,对吧?为了防止任何类型的对象复制,我应该使用哪些? MyClass ...

21得票2回答
C++0x中删除虚函数

如果我在C++0x中删除一个虚拟方法,那么会发生什么并不清楚: virtual int derive_func() = delete; 这是不是意味着这个类和所有继承自它的类都无法定义/实现derive_func()方法?还是说这是不合法/编译错误?

19得票1回答
具有删除“通用”情况的专门模板函数在使用 g++ <=4.8.0 和 clang++ 编译时无法通过编译。

在使用旧版本的g++(4.8.0,MinGW)编译项目时,我发现以下代码无法编译: template&lt;typename T&gt; void foo() = delete; template&lt;&gt; void foo&lt;int&gt;(){} int main() { ...

19得票2回答
所有自动生成的构造函数/运算符都被删除的类仍然可以从函数中返回吗?

最近我看到这个答案,它描述了如何初始化一个非默认构造的std::array。 我没有感到吃惊,因为那个答案显然没有执行任何默认构造。 相反,它使用聚合初始化构造了一个临时的std::array,然后在函数返回时将其移动(如果可用移动构造函数)或复制到命名变量中。 因此,我们只需要移动构造函数...

17得票6回答
一个可复制但不可移动的类有哪些使用场景?

阅读完Mehrdad最近提出的问题,关于哪些类应该被 设置为非可移动和因此不可复制的,我开始想知道是否有一种类别可以被复制但不能移动。在技术上,这是可能的:struct S { S() { } S(S const&amp; s) { } S(S&amp;&amp;) =...