copy-constructor相关内容
我在类型脚本处有一个课: export class Child { name:string; 年龄:人数; } 我想强制类实例仅具有类声明具有的属性。 / p> 例如,如果我从firebase中获得一个对象: myFirebaseService .getChild(id).then(function(child){ var currentChi
..
我想用C ++设计一个称为Entity的类。该实体具有一个指向Vector3D成员的指针,该成员是该实体在3D空间中的位置。构造函数允许将Vector3D类型的指针传递给构造函数,从而可以在类外部实例化Vector3D实例。 因为存在指向动态对象的指针。分配对象时,必须重载复制构造函数和赋值运算符以深复制向量。但是,由于向量可以在构造函数中传递,因此它也可以在其他地方使用,因此不能在析构函数
..
下面的代码可以很好地工作(显示RVO): 结构A { A(int){cout
..
我有一个包含100个字段的基类和一个包含2个更多字段的派生类。我想通过调用基类中的getter使Derived类中的所有100个字段都可访问,因此这就是为什么我使用继承而不是合成的原因。在Derived中,我想有一个构造函数,该构造函数会初始化Base中的所有内容: class Base { ... // 100个字段。 } 类派生扩展了Base { ... //还有2个字段。
..
我实现了副本构造器,如此处所述。但是问题仍然是,当我更新 route_copy 时,相同的更新将应用于 route 。因此,我不明白我的代码有什么问题? 公共类Route实现Comparable { private List网站; public Route() { sites = new ArrayList(); } 公共路线
..
今天在大学里,一位教授推荐我在复制构造函数中检查(this!=& copy) operator = 重载时显示。但是我提出了疑问,因为我无法想到在构造对象时 this 永远等于参数的任何情况。 他承认我说的很对。因此,我的问题是,执行此检查是否有意义,还是不可能将其搞砸? 编辑:我想我是对的,但是我会暂时打开它。也许有人想出一些疯狂的神秘C ++魔术。 Edit2 :测试a(a)
..
我一直在思考和搜索,但是我无法解决此问题。 我想要一个对象,当该对象复制到另一个对象中时,两个对象共享某些成员变量。因此,当我更改object1的成员变量的值时,它也更改了object2中的变量。示例: 类ABC { public: int a = 5; // ... } int main(){ ABC object1; ABC object2 = object
..
如果我正确理解,从C ++ 17开始,此代码现在要求不执行任何复制操作: Foo myfunc(void){ return Foo(); } auto foo = myfunc(); //没有副本 函数参数是否也正确? Foo myfunc(Foo foo){ return foo; } auto foo = myfunc(Foo());
..
我正在编写一个具有模板化构造函数和复制构造函数的类。每次我想用非const对象调用复制构造函数时,都会选择模板化构造函数。如何强制编译器选择复制构造函数? 这是mcve: #include struct foo { foo() { std :: cout
..
空和删除副本构造函数的示例: class A { public: //空副本构造函数 A(const A&){} } B类 { public: //删除副本构造函数 A(const A&)= delete; } 他们在实践中是否也这样做(禁止复制对象)?为什么删除比 {} 好? 解决方案 他们在实践中是否这样做(禁用对象复制)
..
我正在尝试使用C ++ 11的构造函数继承功能。以下代码段(从某处复制,我不记得是从哪里复制的)可以正常工作: #include struct Base { Base():Base(0){} Base(int a):Base(a,0){} Base(int a,double b){std :: cout
..
在c ++ 11中,我们可以从另一个构造函数调用一个构造函数。因此,除了定义副本构造函数外,我们还可以每次调用该构造函数吗?就像这段代码一样: class MyString { private: char * ptr; int m_length; public: MyString(const char * parm = nullptr):m_length(0),ptr(n
..
考虑 std :: mutex 。我知道为什么 std :: mutex 不能移动。但是它的副本构造函数显然标记为已删除,但是我还没有看到它的move构造函数这样的声明。那么cppreference为什么说 std :: mutex 不能移动? 根据文档( https://en.cppreference.com/w/cpp/language/move_constructor )有许多无法满足
..
以下代码编译: #include #include #include 使用命名空间std; 类容器 { public: container(){} 〜container(){} }; class Ship { public: Ship(){} // Ship(const Ship&
..
假设我的POD类型如下: 结构A { char a; int b; }; 在我的系统上, sizeof(A)== 8 ,即使 sizeof(char)== 1 和 sizeof(b)== 4 。这意味着数据结构有3个未使用的字节。 现在假设我们这样做了 A x = ...; A y = x; 问题: 是否保证
..
可能使用 rdbuf 和 copyfmt 。这允许格式更改在本地范围内: std :: ostream&运算符
..
我正在阅读直接初始化和复制初始化之间的区别(第8.5 / 12节): T x(一种); //直接初始化 T y = a; //复制初始化 我从阅读复制初始化中的差异在于它需要可访问的&非明确的复制构造器,否则程序将无法编译。我通过编写以下代码进行了验证: 结构A { int i; A(int i):i(i){std :: cout
..
我想使用并使用关键字继承基类的副本构造函数: #include 结构A { A()=默认值; A(const A&){std :: cerr
..
在某些情况下,我想SFINAE删除类模板的复制构造函数和复制赋值运算符。但是,如果这样做,则会生成默认的复制构造函数和默认的赋值运算符。 SFINAE是基于我作为类模板参数传递的标签完成的。问题是SFINAE仅适用于模板,而复制构造函数/赋值运算符不能用作模板。是否存在解决方法? 解决方案 此解决方案使用有条件不可复制的基类(通过显式标记复制构造函数和 template
..
可能重复: 复制构造函数和赋值运算符 我有一个C类,其中重载了Normal,复制构造函数和赋值运算符,以打印出所调用内容的痕迹。 我编写了以下代码来测试什么时候被调用? C c1; ->普通构造函数.. //了解罚款 C c2; c2 = c1; ->普通的构造函数+赋值运算符.. //理解为罚款 C * c3 = new C(C1)->复制构造函数//理
..