首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在两个构造器中,当参数正确时,一个可以工作,另一个不能

这个问题涉及到构造器的概念和参数正确性的判断。构造器是一种特殊的方法,用于创建和初始化对象。在面向对象编程中,构造器通常与类名相同,并且没有返回类型。

当参数正确时,一个构造器可以工作,另一个不能,可能是因为参数类型不匹配或者参数个数不正确。下面我将分别解释这两种情况。

  1. 参数类型不匹配: 构造器在创建对象时需要传入参数,如果传入的参数类型与构造器定义的参数类型不匹配,那么该构造器将无法正常工作。在这种情况下,需要检查传入参数的类型是否与构造器定义的参数类型一致。
  2. 参数个数不正确: 构造器在创建对象时需要传入一定数量的参数,如果传入的参数个数与构造器定义的参数个数不一致,那么该构造器将无法正常工作。在这种情况下,需要检查传入参数的个数是否与构造器定义的参数个数一致。

举例来说,假设有一个名为Person的类,其中定义了两个构造器:

代码语言:txt
复制
public class Person {
    private String name;
    private int age;

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public Person(String name) {
        this.name = name;
    }

    // 其他代码...
}

在这个例子中,第一个构造器需要传入两个参数:name和age,而第二个构造器只需要传入一个参数:name。如果我们使用以下方式创建对象:

代码语言:txt
复制
Person person1 = new Person("Alice", 25);  // 第一个构造器可以工作
Person person2 = new Person("Bob");       // 第二个构造器可以工作
Person person3 = new Person(30, "Charlie");  // 参数类型不匹配,第一个构造器无法工作
Person person4 = new Person("Dave", 35, "Engineer");  // 参数个数不正确,第一个构造器无法工作

从上面的例子可以看出,当参数正确时,一个构造器可以工作,另一个不能。在实际开发中,我们需要根据具体的需求和对象的属性来选择合适的构造器。

腾讯云相关产品和产品介绍链接地址:

  • 腾讯云云服务器(CVM):提供弹性计算能力,满足不同规模业务的需求。详情请参考:https://cloud.tencent.com/product/cvm
  • 腾讯云云数据库 MySQL 版:提供高性能、可扩展的关系型数据库服务。详情请参考:https://cloud.tencent.com/product/cdb_mysql
  • 腾讯云人工智能:提供丰富的人工智能服务,包括图像识别、语音识别、自然语言处理等。详情请参考:https://cloud.tencent.com/product/ai
  • 腾讯云物联网套件:提供全面的物联网解决方案,包括设备接入、数据管理、应用开发等。详情请参考:https://cloud.tencent.com/product/iot-suite
  • 腾讯云移动开发:提供移动应用开发的云端支持,包括移动后端服务、移动推送、移动测试等。详情请参考:https://cloud.tencent.com/product/mobility
  • 腾讯云对象存储(COS):提供安全、稳定、低成本的云端存储服务。详情请参考:https://cloud.tencent.com/product/cos
  • 腾讯云区块链服务(BCS):提供一站式区块链解决方案,包括区块链网络搭建、智能合约开发等。详情请参考:https://cloud.tencent.com/product/bcs
  • 腾讯云虚拟专用网络(VPC):提供安全可靠的云上网络环境,满足不同业务场景的需求。详情请参考:https://cloud.tencent.com/product/vpc
相关搜索:查询可以在一个工作表中工作,但不能在另一个工作表中工作?JavaScript可以工作,但当网站重新加载时,有时javascript在chrome扩展中不能工作RippleButton类可以在一个Python脚本中工作,但不能在处理屏幕时工作当类在Java中扩展另一个类时,在main方法中传递参数在plotly中动态选择的变量在保存到列表中时不能正确呈现,但可以工作为什么window.location.pathname可以在一个函数中工作,而在另一个函数中不能工作?在C++中调用另一个函数时,编译器在参数中查找已删除的构造函数为什么CopyFiles在一个例子中可以工作,而在另一个例子中却不能工作?独一无二的问题!Range.End.Row可以在一个工作簿中工作,但不能在另一个工作簿中工作当top div可以改变高度时,如何垂直堆叠两个div(并在另一个div中)?当我在一个Android项目上工作时,真实的手机可以工作,但模拟器不能在intellij idea中运行为什么setAttribute 'false‘可以在另一个按钮上工作,而不能在Javascript中的自身上工作?工作时在单独的线程上显示一个带有微调器的加载屏幕,ShowDialog可以工作,但显示不能jQuery scrollTop可以在一个代码段中工作,但不能在同一页面的另一个代码段中工作在TypeScript中,当调用一个函数时,为什么我可以提示空参数有其他类型?当使用Python/Tornado时,是否可以在处理程序中通过http请求调用另一个API?为什么在neo4j中加载csv的两个类似的cypher命令中的一个可以工作,而另一个不能?在使用typescript和express时,我不能让res.send在控制器中使用显式类型,但当类型为anny时,它可以工作在postman测试中,当输入参数可以为空时,如何使用多个值中的一个断言响应值?整数文字'115000159351‘在存储到'Int’中时溢出,但在一个项目中工作良好,但在另一个项目中不能正常工作- Swift
相关搜索:
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

第 13 章 拷贝控制

其中,拷贝和移动构造函数定义了当用同类型的另一个对象初始化本对象做什么。拷贝和移动赋值运算符定义了将一个对象赋予同类型的另一个对象做什么。...一个类没有定义这些拷贝控制成员,编译会自动地定义缺失的操作,但编译定义的版本的行为可能并非我们所想。 拷贝构造函数,第一个参数是自身类类型的引用,且任何额外参数都有默认值的构造函数。...、push),会对元素进行拷贝;而 emplace则是进行直接初始化 拷贝初始化过程,编译可以(但不是必须)跳过拷贝/移动构造函数,直接创建对象。...编译略过了拷贝构造函数 一个构造函数,成员的初始化是函数体执行之前完成的,且按照它们类中出现的顺序进行初始化。...编写一个不抛出异常的移动操作,需要通知标准库。除非标准库知道移动构造函数不会抛出异常,否则它会认为移动我们的类对象可能会抛出异常,并且为了处理这种可能性而做一些额外的工作

99350

基于ABP落地领域驱动设计-02.聚合和聚合根的最佳实践和原则

如果你仔细想想,使用非关系型数据库(如MongoDB)Role和User都有关系列表还有一个问题:在这种情况下,相同的信息会在不同的集合重复出现,将很难保持数据的一致性,每当你User.Roles...构造函数验证输入参数的有效性,比如:Check.NotNullOrWhiteSpace(...) 传递的值为空,抛出异常ArgumentException。...初始化子集合,使用 Labels 集合时,不会获取到空引用异常。 构造函数将参数id传递给base类,不在构造函数中生成 Guid,可以将其委托给另一个 Guid生成服务,作为参数传递进来。...无参构造函数对于ORM是必要的。我们将其设置为私有,以防止代码中意外地使用它。 实体属性访问和方法 上面的示例代码,看起来可能很奇怪。比如:构造函数,我们强制传递一个不为null的Title。...请记住,实体不能注入服务。 有两个方式实现: 实体方法上实现业务逻辑,并将外部依赖项作为方法的参数

3K30
  • 《C++Primer》第十三章 拷贝控制

    函数调用过程,具有非引用类型的参数要进行拷贝初始化 一个函数具有非引用的返回类型,返回值会被用来初始化调用方的结果 拷贝构造函数被用来初始化非引用类类型参数,这一特性解释了为什么拷贝构造函数自己的参数必须是引用类型...拷贝初始化过程,编译可以(但不是必须)跳过拷贝/移动构造函数,直接创建对象。...这个类需要一个析构函数,我们几乎可以肯定它也需要一个拷贝构造函数和一个拷贝赋值函数。...: 如果将一个对象赋予它自身,赋值运算符必须能正确工作 大多数赋值运算符组合了析构函数和拷贝构造函数的工作 2....引用计数的工作方法: 每个构造函数需要创建一个引用计数,当我们创建一个对象将计数初始化为1 拷贝构造函数不分配新的计数,而是拷贝给定对象的数据成员,包括计数,同时需要递增共享的计数 析构函数递减计数

    1.6K40

    RefactoringGuru 代码异味和重构技巧总结

    解决方案:新类创建一个字段,并将旧字段的所有使用重定向到该字段。 提取类 问题:一个类做两个类的工作,会非常笨拙。 解决方案:相反,创建一个新类,并将负责相关功能的字段和方法放在其中。...它们,创建一个共享方法,并将代码从条件的相应分支移动到它。然后用相关的方法调用替换条件。结果是,根据对象类,可以通过多态实现正确的实现。...引入参数对象 问题:你的方法包含一组重复的参数。 解决方案:用对象替换这些参数。 移除设置方法 问题:字段的值应该只创建设置,之后任何时候都不能更改。 解决方案:删除设置字段值的方法。...用工厂方法代替构造 问题:你有一个复杂的构造,它的功能不仅仅是在对象字段设置参数值。 解决方案:创建一个工厂方法并使用它替换构造调用。 用异常替换错误代码 问题:方法返回指示错误的特殊值?...上移构造主体 问题:你的子类的构造的代码基本相同。 解决方案:创建一个超类构造,并将子类相同的代码移动到它。子类构造调用超类构造

    1.8K40

    Java的final

    3.1、final修饰一个基本数据类型,表示该基本数据类型的值一旦初始化后便不能发生变化;3.2、如果final修饰一个引用类型,则在对其初始化之后便不能再让其指向其他对象了,但该引用所指向的对象的内容是可以发生变化的...比如在上例,线程B有可能就是一个正确初始化的对象finalDemo。 读final域重排序规则 一个线程,初次读对象引用和初次读该对象包含的final域,JMM会禁止这两个操作的重排序。...问题:为什么final引用不能构造函数“溢出” 一个比较有意思的问题:上面对final域写重排序规则可以确保我们使用一个对象引用的时候该对象的final域已经构造函数被初始化过了。...但是这里其实是有一个前提条件的,也就是:构造函数,不能让这个被构造的对象被其他线程可见,也就是说该对象引用不能构造函数“逸出”。...2.final修饰一个基本数据类型,表示该基本数据类型的值一旦初始化后便不能发生变化 3.final修饰一个引用类型,则在对其初始化之后便不能再让其指向其他对象了,但该引用所指向的对象的内容是可以发生变化的

    55230

    《C++Primer》第十二章 动态内存

    无论何时我们拷贝一个shared_ptr,计数都会递增: 用一个shared_ptr初始化另一个shared_ptr 将shared_ptr作为参数传递给一个函数 作为函数的返回值 当我们给一个shared_ptr...shared_ptr被销毁,shared_ptr通过对象的一个特殊成员函数——析构函数destructor完成销毁工作的。...比如b1和b2是两个StrBlob对象,如果此vector保存在b2,那么b2离开作用域此vector也会被销毁。为了保证此vector的元素继续存在,我们将vector保存在动态内存。...,有时可以检测出这种问题 同一块内存释放两次:两个指针指向相同的动态分配对象可能发生这种错误,第一次delete对象的内存就被归还给自由空间了,第二次delete可能破坏自由空间 坚持只使用智能指针...(b,n,t):迭代b指向的内存地址开始创建n个对象,b必须指向足够大的未构造的原始内存,能够容纳给定数量的对象 举个例子,我们希望把一个int的vecotr的元素拷贝到一个动态数组,并且这个动态数组的长度是它的两倍

    1.4K10

    【c++】类和对象(五)赋值运算符重载

    赋值运算符重载在对象已存在使用,用于将一个对象的值赋给另一个对象 目的:拷贝构造函数的目的是创建一个新的、状态相同的对象副本。...自赋值大多数情况下是可以工作的,但是特定的情况下,如果没有正确处理,它可能会引起错误或意外的行为。...考虑自赋值的主要原因是为了确保对象赋值给自身,程序仍然能够正确、安全地运行 特别是涉及到动态内存管理,不正确处理自赋值可能会导致问题。...Stack的对象之间相互赋值,就会将一个对象内容原封不动拷贝到另一个对象 s2 = s1;s1给s2赋值,编译会将s1内容原封不动拷贝到s2,这样会导致两个问题: s2原来的空间丢失了...都是一元运算符,为了让前置++与后置++形成能正确重载C++规定:后置++重载多增加一个int类型的参数,但调用函数参数不用传递,编译自动传递 注意:后置++是先使用后+1,因此需要返回+1

    17910

    Java开发者容易犯的十个错误

    可以用于方便转换list,不能添加新元素,所以选择正确的使用场景。...这种情况下使用迭代才是正确的方法,foreach循环Java工作像是一个迭代,但实际上并不是,考虑下面的代码: [java] ArrayList list = new ArrayList...Super和Sub构造函数 ? 这个编译错误是因为默认的Super构造函数是未定义的。Java,如果一个类没有定义一个构造函数,编译会默认的为类插入一个参数构造函数。...如果一个构造函数是Super类定义的,这种情况下Super(String s),编译不会插入默认的无参数构造函数。...编译Sub类中试图将Super()插入到两个构造函数,但是Super默认的构造函数是没有定义的,编译才会报错。如何解决这一问题?

    51520

    Java开发者容易犯的十个错误

    可以用于方便转换list,不能添加新元素,所以选择正确的使用场景。...这种情况下使用迭代才是正确的方法,foreach循环Java工作像是一个迭代,但实际上并不是,考虑下面的代码: [java] ArrayList list = new ArrayList...Super和Sub构造函数 ? 这个编译错误是因为默认的Super构造函数是未定义的。Java,如果一个类没有定义一个构造函数,编译会默认的为类插入一个参数构造函数。...如果一个构造函数是Super类定义的,这种情况下Super(String s),编译不会插入默认的无参数构造函数。...编译Sub类中试图将Super()插入到两个构造函数,但是Super默认的构造函数是没有定义的,编译才会报错。如何解决这一问题?

    48300

    C++进阶之路:何为拷贝构造函数,深入理解浅拷贝与深拷贝(类与对象_中篇)

    然而,一个类拥有指针或引用等需要特别注意的成员变量,编译生成的默认拷贝构造函数不能保证正确的深拷贝,会导致浅拷贝问题和内存泄漏等问题。...对象拷贝 C++,对象拷贝指的是将一个对象的值复制到另一个对象。常见的对象拷贝方法包括拷贝构造函数和赋值运算符。 拷贝构造函数是用来创建一个对象,该对象与另一个对象具有相同的值。...如果类包含指针或资源管理的成员变量,则需要手动实现深拷贝,以确保正确的对象复制和资源释放。否则,执行浅拷贝两个对象将共享同一块内存,可能会导致悬挂指针、内存泄漏等问题。...使用对象拷贝,还需要注意对象的生命周期和内存管理,避免出现悬挂指针、内存泄漏等问题。 浅拷贝: 浅拷贝是指简单地将一个对象的值复制给另一个对象,包括对象的所有成员变量。...这意味着拷贝后的对象和原始对象共享同一块内存,其中一个对象修改了内存的值另一个对象也会受到影响。这种情况下,如果两个对象的析构函数试图同时释放同一块内存,会导致内存错误。

    39000

    【C++】智能指针详解

    -析构函数完成销毁工作的,类似于构造函数,每个类都有一个析构函数。...new传递额外的参数例子我们传给它一个由标准库定义的nothrow的对象,如果将nothrow传递给new,我们的意图是告诉它不要抛出异常。...用unique_ptr传递删除 unique_ptr默认使用delete释放它指向的对象,我们可以重载一个unique_ptr默认的删除 我们必须在尖括号unique_ptr指向类型之后提供删除类型...创建或reset一个这种unique_ptr类型的对象,必须提供一个指定类型的可调用对象删除。...,并且将这两个操作定义成私有的,这样就保证scoped_ptr不能使用拷贝来构造新的对象也不能执行赋值操作,更加安全,但有了”++””–”以及“*”“->”这些操作,比weak_ptr能实现更多功能。

    90230

    JMM 知识点总结

    主要的目的:定义程序各种变量的访问规则( 关注虚拟机变量存取与内存交互的底层细节 ) 包括:实例字段、静态字段和构成数组的对象元素,不包括局部变量与方法参数 ?...但并不保证程序各个语句计算的先后顺序与输入代码顺序一致,因此如果存在一个计算任务依赖另一个计算任务的中间结果,那么其顺序性并不能靠代码的先后顺序保证。...执行该屏障的开销很昂贵,因为当前处理通常要把写缓冲区的数据全部刷新到内存 JMM ,如果一个操作执行的结果需要对另一个操作可见,那么这两个操作之间必须要存在 happens-before 关系...这里提到的两个操作既可以一个线程内,也可以是不同线程之间 编译和处理重排序时,会遵守数据依赖性,编译和处理不会改变存在数据依赖关系的两个操作的执行顺序,仅仅针对单个处理和单个线程 重排序...,这两个操作不能重排序 2.初次读一个包含 final 域的对象引用,与随后初次读这个 final 域,这个两个操作不能重排序 3.构造函数内对一个 final 引用对象的写入,与随后构造函数外这个被构造对象引用赋值给一个引用变量

    41220

    【笔记】C++面向对象高级编程

    委托, 利用指针实现, 功能来自类内一个指向另一个类的指针 构造的时候都是从小到大(从父类到子类), 析构则相反, 内存分配也是大套小的 设计模式 普通单例: 静态成员类内, 只要一写出这个类就会构造...这个关键字比较少见, 几乎只会出现在构造函数的前面 指针与引用 类重载用于指针的运算符->, 注意应该返回一个指针, 因为这个运算符比较特别, 编译会将其重复展开直到获得实际内容为止 引用是一种别名...模板 全特化的模板记得要去掉所有模板参数, 改写为template 模板模板参数: 指模板参数里面是一个模板, 在这种情况下可以另一个模板类作为参数导入, 只要保证可控的其它模板参数都能正确填满即可...程序区分的方法是两个版本同时存在的时候, 对象只会调用与自己对应的版本....且从placement new中提取输入的参数交给placement delete, 其目的仅仅是让程序员可以异常发生的时候也正确归还那些构造到一半的内存.

    90630

    Spring框架参考手册_5.0.0_中文版_Part II_3.4

    3.4.1 依赖注入 依赖注入(DI)是一个处理过程,凭借对象之间依赖关系,也就是和它们一起工作的其它对象,只能通过构造函数参数,传递参数给工厂方法,构造完成或工厂方法返回的对象实例之后再设置对象实例的属性...因此下面的配置会工作良好,你不必元素显式的指定构造函数参数索引的与/或类型。...对于每一个bean,它的依赖通过属性、构造函数参数、或静态工厂方法参数的形式表示,静态工厂方法可以替代标准的构造函数。bean实际创建,这些依赖会提供给bean。...通常情况下你可以信任Spring去做正确的事情。容器加载它检测配置问题,例如引用不存在的beans和循环依赖。bean实际创建,Spring设置属性和解析依赖尽可能的晚。...一个更关键的限制是查找方法不能与工厂方法一起工作,尤其是配置类不能与@Bean方法同时起作用,由于那种情况下容器不能控制实例的创建,因此不能在飞速写入创建一个运行时产生的子类。

    80440

    《C++Primer》第十四章 重载运算与类型转换

    第十四章 重载运算与类型转换 基本概念 一个重载符是成员函数,this绑定到左侧运算对象,成员运算符的(显式)参数数量比运算对象的数量少一个 运算符函数必须要么是类的成员,要么最少含有一个类类型的参数...执行输入运算符可能发生下列错误: 流含有错误类型的数据读取操作可能失败,例如输入运算符假定接下来读入的是两个数字数据,但是输入的不是数字数据,则读取数据及后续对流的其他使用都将失败 读取操作到达文件末尾或者遇到输入流的其他错误时也会失败...= 相等运算符和不相等运算符一个应该把工作委托给另外一个,这意味着其中一个运算符应该负责实际比较对象的工作另一个只是调用真正工作的运算符 2....一个lambda表达式通过引用捕获变量,将由程序负责确保lambda执行时引用的对象却是存在,因此编译可以直接使用该引用而无需lambda产生的类中将其存储为数据成员。... f(obj):f存储可调用对象obj的副本 f:将f作为条件:f含有一个可调用对象为真;否则为假 f(args):调用f的对象,参数是args 定义为function的成员的类型

    91110

    最失败的 JavaScript 面试问题

    我们作为参数传递给 Promise 构造函数的函数会同步调用还是异步调用? Promise 构造函数接受的函数参数是同步执行的。因此,控制台中接下来要显示的数字是 3。...通过分析回应,我们可以得出结论,大多数受访者假设传递给 Promise 构造函数作为参数的执行函数是异步调用的方面是错误的(44%的人选择了这个选项)。...示例,obj.foo 函数作为一个参数传递给另一个 callFoo 函数,后者没有上下文的情况下调用它。...普通模式下,没有执行上下文并且代码浏览环境运行时,this 指向 window 对象,严格模式下,它是 undefined。 正确答案是 undefined。...解释: 箭头函数不能用作构造函数,使用 new 调用时会抛出错误。

    16820

    通过异常处理错误(5):异常的限制、构造

    接口Storm值得注意,因为它包含了一个Inning定义的方法event()和一个不在Inning定义的方法rainHard()。这两个方法都抛出新的异常RainedOut。...尽管继承过程,编译会对异常说明做强制要求,但异常说明本身并不属于方法类型的一部分,方法类型是由方法的名字与参数的类型组成的。因此,不能基于异常说明来重载方法。...如果在构造内抛出异常,这些清理行为也许就不能正常工作了。这意味着在编写构造要格外的细心。      也许你会认为使用finally就可以解决问题。...如果对象构造不能失败,就不需要任何catch。Section2,为了构造和清理,可以看到具有不能失败的构造的对象可以群组在一起。     ...本例的异常处理的棘手程度,对于应该创建不能失败的构造一个有力的论据,尽管这么做并非总是可行。      注意,如果dispose()可以抛出异常,那么你可能需要额外的try语句块。

    47920

    JavaScript 工厂函数 vs 构造函数

    它像工厂一样,“生产”出来的函数都是“标准件”(拥有同样的属性) 构造函数 不同于其它的主流编程语言,JavaScript的构造函数并不是作为类的一个特定方法存在的;任意一个普通函数用于创建一类对象...使用new关键字同时使用工厂和构造函数创建两个对象,接着控制台打印这两个对象。...如果你不能正确理解它,那么在运行 JavaScript 应用程序时会产生令人讨厌的后果。 像 Java这 样的语言中,严格限制了如何使用 new 关键字。...但是 javascript ,并不是那么严格,如果你不能正确理解它们可能会导致很多问题。...这就是理解new 运算符JavaScript工作原理非常关键的原因。

    1K20

    final 关键字与安全发布 多线程中篇(十三)

    final的通常理解 Java,final关键字可以用来修饰类、方法和变量(包括成员变量和局部变量) 大家应该都知道final表示最终的、最后的含义,也就是不能在继续 修饰类表示不能继承,修饰方法表示不能重写...也就是说,如果一个类你永远不会让他被继承,就可以用final进行修饰 注意:final类的所有成员方法都会被隐式地指定为final方法(也可以认为不能够继承就是因为所有的方法你都不能继承,所以全部方法隐式...private的,所以如果子类新写了一个看似“重写”的方法,其实是属于子类的新方法,这并不是重写了final方法 final修饰变量,相当于一个只读变量,只能进行读取,而不能进行设置,如果是成员变量那么需要在赋值时或者构造方法对他进行设置...局部变量必须是定义参数列表的就是参数传递,其他时候不能再进行更改了 综上,final的通常认知就是这些,表示最终的、最后的、不可变得,可以用于定义类、方法、变量 其实final还有另外的作用,那就是安全发布对象的一种方法...final关键字能够使得另一个线程不会访问到处于“部分创建”的对象 因为:构造函数退出,final字段的值保证对访问构造对象的其他线程可见 如果某个成员是final的,JVM规范做出如下明确的保证

    1.2K21

    深度解读《深度探索C++对象模型》之拷贝构造函数

    第一种情况,定义一个类对象另一个对象作为初始值,如下: class Foo {}; Foo a; Foo b = a; 第二种情况,调用一个函数,这个函数的参数要求传入一个类对象: class...含有虚函数的情形 从前面的文章我们知道,一个类定义了一个或以上的虚函数,或者继承链上的父类中有定义了虚函数的话,那么编译就会为他们生成虚函数表,并会扩充类对象的内存布局,类对象的起始位置插入虚函数表指针...所以编译需要重设这个虚函数表指针的值,也就是说这里不能采用逐成员拷贝的手法了,程序没有显式地定义拷贝构造函数编译就会生成一个,或者已有的拷贝构造函数插入代码,来完成重设虚函数表指针这个工作...所以对于有虚基类的情况,将一个派生类的对象赋值给基类对象不能采取逐成员拷贝的手法,需要借助虚表来计算出虚基类的成员的相对位置,以获得正确的成员地址,需要生成拷贝构造函数来完成。...不需要涉及到资源的分配和释放,不需要显示地定义拷贝构造函数,编译会为我们做好逐成员拷贝的工作,效率比去调用一个拷贝构造函数要更高效一些。

    23320
    领券