对象作为参数按值传递为什么会调用析构函数?为什么实参中的内容会被修改?

对象作为参数按值传递为什么会调用析构函数?为什么实参中的内容会被修改?

因为对象按值传递时,编译器自动生成的复制构造函数进行了指针的简单拷贝,像指针直接赋值 str=s 一样,而没有拷贝指针指向的内容,这样当你将对象传递给函数时确实会有一个拷贝,但是这个拷贝会有一个指针的拷贝,所以两个对象中的 str 指向的内存一样,在退出函数时,析构销毁了函数中对象中的指针,但不幸的是这样实参对象 str 指向的内容也被销毁。

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1. 变量的初始化:在Java,所有变量都有默认,即使没有显式初始化,变量也被赋予一个默认,这是Java语言的特性之一。而在C++,变量没有默认,如果不显式进行初始化,则变量的是未定义的。在Java,可以使用函数来初始化对象函数是一种特殊的方法,用于创建并初始化对象。而在C++,可以使用函数或初始化列表来初始化对象。 2. 对象的创建方式:在Java对象只能通过new关键字来创建,new关键字在堆上分配内存并返回一个对该对象的引用。而在C++,可以使用new关键字或者直接声明一个对象来创建对象。如果使用new关键字,则在堆上分配内存并返回一个指向该对象的指针。 3. 局部变量是否可以重定义:在Java,局部变量不能被重定义,即在同一个作用域内不能定义同名的局部变量。而在C++,可以在同一作用域内定义多个同名的局部变量。 4. 变量名和方法名是否可重名:在Java,变量名和方法名不能重名,即在同一个作用域内不能定义同名的变量和方法。而在C++,变量名和方法名可以重名,但是在同一个作用域内只能存在一个定义。 5. 继承方式(单、多重):Java只支持单继承,即一个类只能继承自一个父类。而C++支持单继承和多重继承,即一个类可以同时继承多个父类。 6. 默认形:Java不支持默认形,即在函数定义时不能指定形的默认。而C++支持默认形,即在函数定义时可以指定形的默认,如果在调用函数时没有传递,则使用默认作为。 7. 运算符重载:Java不支持运算符重载,即不能通过重载运算符来改变运算符的含义。而C++支持运算符重载,即可以通过重载运算符来改变运算符的含义。 8. 参数传递方式:Java只支持按传递,即将复制给形,形是两个独立的变量。而C++支持按传递和按引用传递,按传递与Java相同,而按引用传递则将的地址传递给形,形指向同一个变量。 9. 函数/拷贝函数/函数:Java只有函数函数是一种特殊的方法,用于创建并初始化对象。而C++函数、拷贝函数函数。拷贝函数用于将一个对象拷贝到另一个对象函数用于释放对象占用的资源。 10. 常量的表示const/final:Java使用final关键字表示常量,即使用final修饰的变量在初始化后不能被修改。而C++使用const关键字表示常量,即使用const修饰的变量也在初始化后不能被修改。 11. 有一个对象(数组)为另一个对象(数组)变量赋:在Java对象和数组都是引用类型,因此可以通过引用来进行赋操作。例如,可以将一个数组的引用赋给另一个数组变量。而在C++,如果要将一个数组赋给另一个数组变量,需要使用memcpy函数来进行复制。 12. 访问控制方式及默认方式:Java使用访问控制符(public、private、protected)来限制对类成员的访问,public表示可访问,private表示不可访问,protected表示只有子类可以访问。默认访问控制符是包访问控制符,即同一个包内的类可以访问。而C++使用访问说明符(public、private、protected)来限制对类成员的访问,public表示可访问,private表示不可访问,protected表示只有子类和派生类可以访问。默认访问控制符是私有访问控制符,即同一个类内的成员可以访问。 13. 总体来说,Java和C++在语法和语义上有很多相似之处,但是也存在着一些不同之处,这些不同之处可能对程序的现方式和结果产生影响。例如,在Java,由于所有变量都有默认,因此可以减少程序员的工作量,但也增加程序的安全隐患。而在C++,由于支持运算符重载和多重继承等特性,可以提高程序的灵活性和扩展性,但也增加代码的复杂度和难度。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值