我最初将这个问题仅限于析构函数,但现在我要考虑默认构造函数。以下是原始问题: 如果我想给我的类一个虚拟的析构函数,但与编译器生成的相同,我可以使用=default:class Widget { public: virtual ~Widget() = default; }; 但是使...
我一直在处理一个朋友写的C++代码,当我使用gcc4.6进行编译时,出现了以下错误,这是我从未见过的:error: use of deleted function ‘GameFSM_<std::array<C, 2ul> >::hdealt::hdealt()’ is...
在下面的例子中,返回不完整类型A的函数f()被标记为已删除: struct A; A f() = delete; 它被GCC所接受,但在Clang中会出现错误: error: incomplete result type 'A' in function definition 演示:...
为了使一个对象不可复制,我们可以显式删除它的复制构造函数和赋值运算符。我的问题是:在类的公共、私有或保护部分中哪个是正确的位置?这个选择会有什么影响吗?
根据标准,如果类X的定义没有明确声明移动构造函数,则只有在以下情况下默认声明为删除: — X没有用户声明的复制构造函数, — X没有用户声明的复制赋值运算符, — X没有用户声明的移动赋值运算符,以及 — X没有用户声明的析构函数。 现在以下内容编译失败:# include <utili...
我有一个使用情况,我的对象绝不能以任何方式被复制。我写了一个夸张的完整的复制构造函数和复制赋值运算符删除列表。有这么多的东西,我无法确定该使用哪些,有时这使我非常焦虑。我不需要在我的代码中编写所有这些内容,对吧?为了防止任何类型的对象复制,我应该使用哪些? MyClass ...
如果我在C++0x中删除一个虚拟方法,那么会发生什么并不清楚: virtual int derive_func() = delete; 这是不是意味着这个类和所有继承自它的类都无法定义/实现derive_func()方法?还是说这是不合法/编译错误?
在使用旧版本的g++(4.8.0,MinGW)编译项目时,我发现以下代码无法编译: template<typename T> void foo() = delete; template<> void foo<int>(){} int main() { ...
最近我看到这个答案,它描述了如何初始化一个非默认构造的std::array。 我没有感到吃惊,因为那个答案显然没有执行任何默认构造。 相反,它使用聚合初始化构造了一个临时的std::array,然后在函数返回时将其移动(如果可用移动构造函数)或复制到命名变量中。 因此,我们只需要移动构造函数...
阅读完Mehrdad最近提出的问题,关于哪些类应该被 设置为非可移动和因此不可复制的,我开始想知道是否有一种类别可以被复制但不能移动。在技术上,这是可能的:struct S { S() { } S(S const& s) { } S(S&&) =...