我不明白C++中赋值构造函数和复制构造函数之间的区别.它是这样的:
class A {
public:
A() {
cout << "A::A()" << endl;
}
};
// The copy constructor
A a = b;
// The assignment constructor
A c;
c = a;
// Is it right?
Run Code Online (Sandbox Code Playgroud)
我想知道如何分配赋值构造函数和复制构造函数的内存?
初始化,直接和复制初始化有两种语法:
A a(b);
A a = b;
Run Code Online (Sandbox Code Playgroud)
我想知道他们有不同定义行为的动机.对于复制初始化,涉及额外的副本,我不能想到该副本的任何目的.由于它是来自临时文件的副本,它可以并且可能会被优化,因此用户不能依赖它发生 - 因为额外的副本本身不足以应对不同的行为.所以为什么?
可能重复:
复制初始化和直接初始化之间的C++是否存在差异?
我刚开始学习C++.
为了用值初始化变量,我遇到了
int a = 0;
Run Code Online (Sandbox Code Playgroud)
和
int a(0);
Run Code Online (Sandbox Code Playgroud)
这让我很困惑.我可以知道哪种方法最好吗?
这有什么区别:
TestClass t;
Run Code Online (Sandbox Code Playgroud)
还有这个:
TestClass t = TestClass();
Run Code Online (Sandbox Code Playgroud)
我希望第二个可能会调用构造函数两次然后调用operator =,而是调用构造函数一次,就像第一次一样.
class A {};
class B { public: B (A a) {} };
A a;
B b=a;
Run Code Online (Sandbox Code Playgroud)
从技术上讲,这是一个复制构造函数在这里应用的创建b
?
我有一个MyPoly类,我实现了自己的相等运算符(=).当我尝试这个代码一切正常,我的实现=被调用.
MyPoly mp = MyPoly(arr , 4);
MyPoly copy;
copy = mp;
Run Code Online (Sandbox Code Playgroud)
但是当我写这个:
MyPoly mp = MyPoly(arr , 4);
MyPoly copy = mp;
Run Code Online (Sandbox Code Playgroud)
它不使用我的implements =,然后当调用析构函数时,我得到一个运行时错误.
有人能解释为什么这些代码不同吗?