2516得票8回答
什么是三个原则?

复制对象是什么意思? 什么是拷贝构造函数和拷贝赋值操作符? 什么情况下需要手动声明它们? 如何防止对象被复制?

347得票9回答
C++11中的Rule-of-Three变成了Rule-of-Five吗?

所以,在观看这个精彩的演讲关于右值引用之后,我认为如果每个类都拥有一个"移动构造函数"template<class T> MyClass(T&& other)(编辑)和一个"移动赋值运算符"template<class T> MyClass& o...

23得票4回答
C++接口是否必须遵守五个规则?

在定义接口类时,声明实例化方法的正确方式是什么? 显而易见,抽象基类需要具有虚析构函数。但是,接下来会出现以下编译警告:“‘InterfaceClass’定义了一个非默认析构函数,但没有定义复制构造函数、复制赋值运算符、移动构造函数或移动赋值运算符”,这就是‘五法则’。 我理解为什么通常应...

18得票3回答
理解-Weffc ++

考虑以下程序:#include <string> struct S { S (){} private: void *ptr = nullptr; std::string str = ""; }; int main(){} 使用GCC 4.7.1编译时,...

16得票2回答
CppCoreGuidelines C.21是否正确?

阅读Bjarne Stroustrup的Core C++ Guidelines时,我发现了一条与我的经验相矛盾的指南。 C.21规范要求: 如果你定义或者=delete任何一个默认操作符,那么就必须定义或=delete全部的默认操作符。 原因是: 这些特殊函数的语义密切相...

16得票3回答
三原则的例外情况是什么?

我已经阅读了大量关于C++ 三法则的内容,很多人都对它深信不疑。但是当这个规则被说明时,几乎总会包含像“通常”,“可能”或“大概”之类的词语,表明有例外情况。我还没有看到过关于这些特殊情况的讨论--即三法则不适用的情况,或者至少遵循它没有任何优势的情况。 我的问题是,我的情况是否是三法则的合...

10得票5回答
C++拷贝构造函数+指针对象

我正在尝试学习C++中的“big three”(即复制构造函数,拷贝赋值运算符和析构函数).. 我设法编写了一个非常简单的“big three”程序.. 但我不确定如何使用对象指针.. 以下是我的第一次尝试。 在编写代码时我有一个疑问... 问题 这是实现默认构造函数的正确方式吗?我不...

9得票3回答
安全赋值和拷贝交换技巧

我正在学习C++,最近在stackoverflow上了解到拷贝并交换惯用法,并对此有几个问题。假设我有以下使用拷贝并交换惯用法的类,仅供举例: class Foo { private: int * foo; int size; public: Foo(size_t size) ...