60得票5回答
C++中含有其他对象的类的隐式复制构造函数

我知道如果你没有自己实现拷贝构造函数,编译器有时会提供一个默认的拷贝构造函数。但是我不确定这个构造函数具体做了什么。如果我有一个包含其他对象的类,其中没有一个声明了拷贝构造函数,那么行为会是什么样子?例如,像这样的一个类:class Foo { Bar bar; }; class Bar...

52得票1回答
在LLVM中调用了隐式删除的复制构造函数

根据C++11规则,将默认生成6个函数(默认构造函数、拷贝构造函数、移动构造函数、赋值构造函数、移动赋值函数和析构函数)。根据第二条规则,当定义任何自定义的拷贝、移动或析构函数时,那些默认操作将不会被生成。 但是在我的代码中却不是这样的。但是此代码无法编译并显示错误。call to impli...

36得票7回答
C++的默认复制构造函数本质上是不安全的吗?迭代器也基本上是不安全的吗?

我曾认为当遵循最佳实践时,C++的对象模型非常健壮。 然而,就在几分钟前,我有了一个之前从未有过的领悟。 考虑以下代码:class Foo { std::set<size_t> set; std::vector<std::set<size_t>::...

15得票7回答
C# 结构体的自动深拷贝

我有一个叫做MyStruct的结构体,其中包含一个私有成员变量private bool[] boolArray;和一个方法ChangeBoolValue(int index, bool Value)。 我还有一个类MyClass,它有一个字段public MyStruct bools { g...

14得票1回答
在C++0x中,非静态数据成员初始化程序是否覆盖隐式的复制构造函数?

根据与 N2628 相关的 c++0x,非静态数据成员初始化器可以被显式定义的构造函数覆盖,但对于隐式定义的复制构造函数似乎有些模糊。 特别是,我注意到在 Apple clang 版本 3.0 中,行为取决于结构体(或类)是否为 POD。 以下程序返回输出“1”,这表明复制构造函数忽略右侧...

10得票5回答
在引用存在的情况下赋值运算符和复制构造函数

我只是在用这段代码尝试引用:class A { }; class B { public: B(A& a): m_a(a){} A& m_a; }; int main() { A a; B b(a); B b1 = b; } 我本来期...

10得票2回答
为什么不调用复制构造函数?

非常抱歉标题表述不够明确(由于我的英语水平有限)。请建议一个更好的标题。 请考虑以下代码。struct A { typedef std::vector<double> State; // template <class... Args> /...

7得票2回答
如果我定义了非const参数的复制构造函数和赋值运算符,那么我是否仍然会得到默认的复制构造函数和operator=?

在 C++ 中,如果我定义了一个拷贝构造函数和 operator= 函数,这些函数都接受到一个非 const 引用作为参数,那么编译器是否应该为 const 引用仍然提供默认版本呢? struct Test { Test(Test &rhs); Test &opera...