为什么我们要通过引用传递类的对象。当我移除符号(&)时,我会得到以下错误。
"Copy constructor of class A may not have parameter of type A"
这是什么意思?可能是编译器没有考虑给定一个复制构造函数,并且使用默认的one.If --这就是为什么调用默认构造函数的原因。总之,为什么我们使用符号和会发生什么?如果我们不这么做。
class A
{
public:
A()
{
}
A(A& tmp)
{
id = 2*tmp.id;
}
我在网上找到了一段代码:
#include <iostream>
using namespace std;
class Line {
public:
int getLength( void );
Line( int len ); // simple constructor
Line( const Line &obj); // copy constructor
~Line(); // destructor
private:
i
因此,我对move语义的理解是,它们允许您重写函数,以便使用临时值(Rvalue),并避免可能代价高昂的副本(方法是将状态从未命名的临时值移动到指定的lvalue中)。
我的问题是,为什么我们需要特殊的语义学呢?为什么C++98编译器不能删除这些副本,因为是编译器决定给定表达式是lvalue还是rvalue?例如:
void func(const std::string& s) {
// Do something with s
}
int main() {
func(std::string("abc") + std::string("def
我正在通过再次学习复制构造函数。
代码:
#include <iostream>
using namespace std;
class Line
{
public:
int getLength( void );
Line( int len ); // simple constructor
Line( const Line &obj); // copy constructor
~Line(); // destructor
private:
我有以下类:
class A
{
public:
B& getB() {return b;}
private:
B b;
};
class B
{
~B() {cout<<"destructor B is called";}
...
};
void func()
{
A *a = new a;
B b = a->getB();
.....
}
为什么在退出函数func时会调用B类的析构函数?函数getB是否返回对对象B的引用?如果A类仍然存在于函数func的末尾,为什么要调用B的析构函数?
下面的代码给出了错误:
use of deleted function ‘constexpr B::B(const B&)’
现在,我知道这是因为通过指定移动构造函数(有意)隐式删除了复制构造函数,并且复制向量会导致对(已删除的)复制构造函数的调用。我也理解为什么要使用向量的复制构造函数和赋值操作符。显然,我希望使用move构造函数和赋值操作符:移动对象,因此也要移动它包含的向量。那么,如何让移动构造函数/赋值操作符使用向量的移动构造函数/赋值操作符?
以下是代码:
#include <vector>
class B {
private:
/* something
我对“对象能否作为值传递给复制构造函数”有些困惑,编译器明确地拒绝了这一点,这意味着这是不可能的。你能帮我理解一下吗?
class Dummy{
Dummy(Dummy dummy){ // This is not possible
}
};
那么为什么要说“当使用按值传递时,复制构造函数将导致递归调用”。
我不明白为什么我的输出以“ACCB.”开头--我的期望是“ACB.”
为什么class A的复制构造函数会被调用两次?
#include <iostream>
using namespace std;
class A
{
int x, y, z;
public:
A(int x, int y, int z) :x(x), y(y), z(z) { cout << "A"; }
A(A& a) :x(a.x), y(a.y), z(a.z) { cout << "C"; }
我使用的是Visual Studio2012Update2,我很难理解为什么std::vector试图使用unique_ptr的复制构造函数。我看过类似的问题,大多数都与没有显式的移动构造函数和/或运算符有关。
如果将成员变量更改为字符串,则可以验证是否调用了move构造函数;但是,尝试使用unique_ptr会导致编译错误:
error C2248: 'std::unique_ptr<_Ty>::unique_ptr' : cannot access private member declared in class 'std::unique_ptr<
我正在浏览一次C++巡回赛( 5.2节,复制和移动)。按照书中的说明,我构建了一个名为Vector的容器(它模仿std::vector)。我的目标是有效地实现以下(按元素划分)求和:
Vector r = x + y + z;
根据这本书,如果我没有移动赋值和构造函数,+操作符将不必要地复制Vector。因此,我实现了移动赋值和构造函数,但我认为编译器在运行Vector r = x + y + z;时仍然不使用它们。我遗漏了什么?我很感谢你的反馈。下面是我的密码。我希望看到一个输出Move assignment,但没有输出。(求和部分起作用,只是移动业务,我不确定)
码
// Vector.h