1.概要
什么时候调用拷贝构造,就是有对象创建的时候,就会调用拷贝构造,无论对象是构造(类(来源))还是赋值(=对象)都会调用拷贝构造。
赋值函数调用的时机是两个对象都已经创建完了,的情况下采用调用(a(已经创建)=b(已经创建))。
调用拷贝赋值函数和拷贝对象的差别就在于目标函数是否已经创建了。如果创建了使用赋值函数,如果未创建使用拷贝构造。
2.代码
#include <iostream>
//拷贝构造函数实验
class A
{
public:
A();
~A();
//A(const A&) = delete;
A(const A& ia) {
//*this = ia;
this->a = ia.a;
std::cout << "Copy construction \n";
}
A& operator=(const A& is) = delete;
void fun() {
std::cout << "my fun\n";
}
private:
int a = 5;
};
A::A()
{
}
A::~A()
{
}
void test1() {
std::cout << "----- A b(a) ---------------\n";
A a;
A b(a);
}
void test2() {
std::cout << "----- A c = a ---------------\n";
A a;
A c = a;
}
void test3() {
std::cout << "----- A* p_a = new A(a); ---------------\n";
A a;
A* p_a = new A(a);
}
void test4() {
std::cout << "----- A* p_b = p_a; ---------------\n";
A a;
A* p_a = new A(a);
A* p_b = p_a;
}
void test5() {
std::cout << "----- A d = *p_a ---------------\n";
A* p_a = new A();
A d = *p_a;
}
int main()
{
test1();
test2();
test3();
test4();
test5();
std::cout << "Hello World!\n";
}
3.运行结果
----- A b(a) ---------------
Copy construction
----- A c = a ---------------
Copy construction
----- A* p_a = new A(a); ---------------
Copy construction
----- A* p_b = p_a; ---------------
Copy construction
----- A d = *p_a ---------------
Copy construction
Hello World!
文章详细解释了在C++中何时会调用拷贝构造函数,尤其是在对象创建、赋值操作以及动态内存分配时。通过示例代码展示了拷贝构造函数在不同情况下的调用,并给出了运行结果。
3341

被折叠的 条评论
为什么被折叠?



