首页 > 试题广场 >

下列情况中,不会调用拷贝构造函数的是()

[单选题]
下列情况中,不会调用拷贝构造函数的是()
  • 用一个对象去初始化同一个类的另一个新对象时
  • 将类的一个对象赋值给该类的另一个对象时
  • 函数的形参对象,调用函数进行形参和实参结合时
  • 函数的返回值是类的对象,函数执行返回调用时
推荐
【正确答案】B
【解析】将类的一个对象赋值给该类的另一个对象时,调用的不是拷贝构造函数,而是赋值运算符重载函数。
 
拷贝构造函数知识点讲解】
更多C++基础专业知识讲解,点击链接即可查看
https://www.nowcoder.com/link/zxyl-cpp44
编辑于 2021-11-17 15:58:27 回复(0)
选B
发表于 2020-08-31 11:30:22 回复(0)
比如 class Base{};
Base w1;     //构造函数
Base w2(w1);   //拷贝构造函数
w1 = w2;     //赋值运算符

Base w3 = w1; //拷贝构造函数
编辑于 2016-08-05 16:16:32 回复(6)
调用拷贝构造函数的3中情况:
1、用一个对象去初始化同一个类的另一个新对象时
2、函数的形参对象,调用函数进行形参和实参结合时 3、函数的返回值是类的对象,函数执行返回调用时 将一个对象赋值给另一个对象,两个对象都存在,调用的是赋值构造函数,不涉及内存的分配。
当被赋值的对象不存在调用的是拷贝构造函数。
发表于 2016-06-16 16:55:52 回复(2)
这篇博客讲的挺好的
http://blog.csdn.net/lwbeyond/article/details/6202256
发表于 2016-06-13 10:01:06 回复(0)
注意赋值运算,拷贝构造的区别在于对象是否已经存在
发表于 2017-04-19 15:45:15 回复(0)
B,要被赋值的对象已经存在,不需要再调用构造函数
发表于 2018-01-23 01:45:09 回复(0)
调用拷贝构造函数的3中情况:
1、用一个对象去初始化同一个类的另一个新对象时
 2、函数的形参对象,调用函数进行形参和实参结合时
 3、函数的返回值是类的对象,函数执行返回调用时 将一个对象赋值给另一个对象,两个对象都存在,调用的是赋值构造函数,不涉及内存的分配。 
当被赋值的对象不存在调用的是拷贝构造函数。
这里要突出的是要建立一个新对象才会调用构造函数

发表于 2020-07-07 10:19:33 回复(0)
例如:有class A  function f()对象p1,p2
拷贝构造函数就是用一个已知的对象初始化另一个对象
使用拷贝构造函数的情况:
(1)明确表示由一个对象初始化另一个对象:A p1(p2 );
(2)当对象作为函数实参传递给函数形参时:p1 =f(p2);
(3)当一个自动存储类对象作为函数返回值时:return p1;
发表于 2016-10-11 10:40:35 回复(0)
class Test{....};
Test obj1,obj3;
Test obj2=obj1;//调用拷贝构造函数
obj3=obj2//调用赋值拷贝运算符。
发表于 2016-09-05 10:13:28 回复(1)
类赋值需要通过“=”重载
发表于 2016-05-04 20:02:12 回复(0)
将类的对象赋值给同类的另一个对象时,是将两对象指向相同的段地址;
拷贝构造函数是创建对象的副本,新对象的修改不改变原对象。

编辑于 2016-05-04 21:38:57 回复(2)
将类的一个对象赋值给该类的另一个对象时,调用的不是拷贝构造函数,而是赋值运算符重载函数,赋值运算符重载函数,赋值运算符重载函数。
发表于 2022-03-14 14:11:55 回复(0)
当两个对象都存在时,把一个对象赋给另一个对象使用的是赋值运算符重载
发表于 2019-11-01 20:17:02 回复(0)
将类的一个对象赋值给已存在的另一个对象调用的是赋值构造函数。

拷贝构造函数的三种调用场景
class AA{};
1、 AA a1;
AA a2 = a1;
或者:AA a2(a1);
这里要突出是一个新对象;

2、函数的形参对象,调用函数进行形参和实参结合时
3、函数的返回值是类的对象,函数执行返回调用时
发表于 2017-09-05 09:19:46 回复(0)
拷贝构造函数是在创建对象时调用,赋值函数是在已经对象进行赋值时调用。
发表于 2016-05-24 21:44:30 回复(0)

将类的一个对象赋值给该类的另一个对象时,会调用赋值操作符函数。如果没有重载赋值操作符,则会调用默认的合成赋值操作符函数,它会逐个成员进行赋值操作。

而拷贝构造函数是在创建新对象时,以已存在对象的值来初始化成员变量,而不是赋值。因此选项B是不会调用拷贝构造函数的。

发表于 2023-10-30 16:30:18 回复(0)
1、用一个对象去初始化同一个类的另一个新对象时 2、函数的形参对象,调用函数进行形参和实参结合时 3、函数的返回值是类的对象,函数执行返回调用时 将一个对象赋值给另一个对象,两个对象都存在,调用的是赋值构造函数,不涉及内存的分配。 当被赋值的对象不存在调用的是拷贝构造函数。
发表于 2022-11-28 15:48:36 回复(0)
MyClass a;
MyClass b = a;  // 1

MyClass c,d;
c = d;    // 2
用中文描述这些代码理解有点蛋疼。比如上面的说:
直接看代码就能知道1处调用拷贝构造函数,2处调用了赋值函数。 
发表于 2022-10-12 11:26:49 回复(0)
拷贝构造函数是一个特殊的构造函数,是单参的,参数类型必须是类类型& 一般情况下会使用const来进行修饰。
调用时机:当用已经存在的对象构造新对象时,编译器会自动调用拷贝构造函数。
场景:
A a1
A a2(a1) //拷贝构造函数
void fun(A a)
{} //传参也会调用拷贝构造函数
A fun()
{
A a;
return a;   //调用拷贝构造函数
}
发表于 2022-09-24 21:57:51 回复(0)
赋值

发表于 2021-12-14 09:56:22 回复(0)