c++ c++-faq copy-constructor assignment-operator rule-of-three
因此,在观看了关于右值引用的精彩演讲之后,我认为每个类都会受益于这样的"移动构造函数",template<class T> MyClass(T&& other) 编辑,当然还有"移动赋值运算符",template<class T> MyClass& operator=(T&& other)正如Philipp在他的回答中指出的,如果它已经动态分配成员,或通常存储指针.就像你应该有一个copy-ctor,赋值运算符和析构函数,如果之前提到的点适用.思考?
自复制构造函数
MyClass(const MyClass&);
Run Code Online (Sandbox Code Playgroud)
和=运算符重载
MyClass& operator = (const MyClass&);
Run Code Online (Sandbox Code Playgroud)
有几乎相同的代码,相同的参数,只有不同的返回,是否有可能有一个共同的功能,他们都使用?
我正在阅读复制和交换.
我尝试阅读Copy Elision上的一些链接,但无法弄清楚它的含义.有人可以解释一下这种优化是什么,特别是下面的文字是什么意思
这不仅仅是为了方便,而且实际上是一种优化.如果参数绑定到左值(另一个非常量对象),则在创建参数时会自动创建对象的副本.但是,当s绑定到rvalue(临时对象,文字)时,通常会省略该副本,从而保存对复制构造函数和析构函数的调用.在赋值运算符的早期版本中,参数被接受为const引用,当引用绑定到右值时,不会发生复制省略.这导致创建和销毁另外的对象.
我有一个类,需要一个非默认的复制构造函数和赋值运算符(它包含指针列表).有没有通用的方法来减少复制构造函数和赋值运算符之间的代码重复?
由于某种原因,我不得不为我的班级提供复制构造函数和operator =.operator=如果我定义了一个副本ctor,我想我不需要,但是QList想要一个.把它放在一边,我讨厌代码重复,所以这样做有什么不对吗?
Fixture::Fixture(const Fixture& f) {
*this = f;
}
Fixture& Fixture::operator=(const Fixture& f) {
m_shape = f.m_shape;
m_friction = f.m_friction;
m_restitution = f.m_restitution;
m_density = f.m_density;
m_isSensor = f.m_isSensor;
return *this;
}
Run Code Online (Sandbox Code Playgroud)
只是出于好奇,没有办法切换它,以便大部分代码都在复制文件中并operator=以某种方式利用它?我尝试过,return Fixture(f);但不喜欢那样.
看来我需要更清楚地说明复制构造函数和赋值运算符已被我继承的类隐式禁用.为什么?因为它是一个抽象的基类,不应该自己实例化.然而,这门课程是独立的.
有人能解释一下复制和分配之间的区别吗?
SomeClass a;
SomeClass b = a; // assignment
SomeClass c(a); // assignment
b = c; // copying
Run Code Online (Sandbox Code Playgroud)
但有什么区别,为什么语言中有两种不同的结构?
经过大量搜索后,至少这个问题帮助我理解了使用复制构造函数和赋值运算符的区别
我的问题是关于这一行
instance has to be destroyed and re-initialized if it has internal dynamic memory
如果我初始化一个类似的实例
Object copyObj = null;然后再分配copyObj = realObj那么仍然这个开销(破坏和重新初始化)仍然存在?
如果没有,那么在这种情况下,为什么我应该使用Copy Constructor而不是直接分配对象
c++ ×8
c++-faq ×2
constructor ×2
c++11 ×1
copy-elision ×1
dry ×1
java ×1
oop ×1
optimization ×1