CC加加JAVA书_我想和你们说说java和C++___C加加

头痛头痛之一:

java里面,本质上来说,一个类是一个程序员定义的类型,类是一种引用类型(reference type),这意味着该类类型的变量都可以引用该类的一个实例。从表面上,对象引用变量中似乎存放了一个对象,但事实上,它只是包含了对该对象的引用。严格来讲,对象引用变量和对象是不同的,对象(new Person()),对象引用变量(Person p)。但大多数情况下,这种差异是可以忽略的。因此,可以简单地说p是一个Person对象,而不用冗长地描述说,p是一个包含对Person对象引用的变量。-----java基础篇P278

所以,Person p;   p.a = 2; 这样是不行的,因为这个时候p还没指向任何内存。是null

所以需要Person p = new Person();

相反,C++直接 Person p; 即可调用p.a = 2;

头痛头痛之二:

java里面的方法,

public void fuck(finalStringBuilder str) {

str.append("haha");

}

这样的final只是说,不能改变str,也就是str不能指向其他地方,还是可以修改它指向的内容的。比如上面是ok的,会修改的

但是C++

void fun(const char * str)

就已经表明,str的内容是不可变的,至于指向,本来就是值拷贝,改变了对我影响不到的。只是在函数中临时改变

再比如

void fun(char * conststr) {

str[0] = '0';

}

指针常量,表明这个指针是一个常量,不可以再改变指向了,但是这个时候还是可以修改它指向的那块内存的值的。

注意:这个时候那块内存需要存在,如果你的是char * str = "liuweiming",这样它一更改还是会报错的,因为不能更改字符串常量

字符串常量保存在代码区

所以很大的区别就是final string str,表明的和const char * str不同

void fun(char * const str) {    str[0] = '0';}

头痛头痛之三、

java中的类,默认类型,也就是什么都不写,也不算private的,只是说明其是包私有而已,同个包的还是能访问。

C++/C#中的类,默认类型,是private的,就是什么都不写,就不能访问了。

C++的shared_ptr是一种智能指针,它可以自动管理动态分配的内存,避免了手动管理内存的繁琐和容易出错的问题。 shared_ptr内部通过引用计数的方式来管理资源,每个shared_ptr都拥有一个计数器,记录有多少个shared_ptr指向同一个资源。当计数器为0时,资源被自动释放。此外,shared_ptr还使用了弱引用的概念,可以避免循环引用导致的内存泄漏。 shared_ptr与unique_ptr不同,可以被多个指针共享,因此可以用来管理共享资源。同时,shared_ptr还提供了自定义删除器的功能,可以在释放资源时调用自定义的函数。 使用shared_ptr需要包含头文件<memory>,然后可以通过以下方式创建shared_ptr对象: ```C++ std::shared_ptr<int> p1 = std::make_shared<int>(42); // 创建一个指向int类型的shared_ptr对象 std::shared_ptr<int> p2(p1); // 创建一个指向p1所指向的资源的shared_ptr对象 std::shared_ptr<int> p3 = std::move(p1); // 创建一个指向p1所指向的资源的shared_ptr对象,并将p1置为null ``` 此外,也可以使用自定义的删除器: ```C++ std::shared_ptr<int> p4(new int, [](int* p){delete p;}); // 创建一个指向int类型的shared_ptr对象,并使用自定义的删除器 ``` 需要注意的是,shared_ptr可能会出现多个shared_ptr指向同一个资源,导致资源被提前释放或者重复释放的问题。此外,shared_ptr也无法处理循环引用的情况,需要使用weak_ptr来避免。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值