- 博客(18)
- 收藏
- 关注
原创 C++ 什么时候使用std::ref
ref(obj)返回值可以简单理解为一个ref类对象,在此对象中有一个变量指针指向obj的地址,也就是说ref类中的数据包含了obj的引用。当然,实际实现和这个描述有一定区别,但你可以简单这样理解。
2024-05-30 17:30:12
1051
原创 C++ std::function和std::bind的六种用法总结
1,使用function接收普通函数2,使用function接收lambda函数3,使用function函数来接收函数对象4,使用bind函数绑定类中的一般函数5,使用bind函数绑定类中的多态函数6,使用function来实现回调。
2024-05-29 17:00:49
624
原创 C++ 线程同步condition_variable的使用
创建一个scondition_variable对象。创建一个互斥量对象mutex。创建两个线程:等待线程和唤醒线程。在等待线程中,使用unique_lock锁定互斥量,并调用wait函数进入等待状态。在唤醒线程lock_guard锁定互斥量,并调用notify_one或notify_all函数唤醒等待的线程。
2024-05-28 15:45:11
320
原创 C++ STL list去重
这样的代码是不能编译通过的。list本身提供了sort函数和unique函数,因此用这两个函数就可以实现去重。标准库中的函数sort可以用于数组,vector, deque。
2024-05-17 17:50:07
428
1
原创 C++: 自己动手写一个类似std::auto_ptr的智能指针模板类
auto_ptr指针虽然已经被抛弃不再使用,但他是unique_prt和share_ptr指针的基础,通过自己写的自动指针类,就可以清楚的知道auto_ptr的使用方法,以及它有什么不足之处,为什么会被抛弃。从代码可以看出,auto_ptr只支持拷贝构造函数,并在拷贝构造函数中完成了对象指针所有权的转移。也就是说,一个对象指针只能被一个智能指针所拥有,这个和auto_prt是一样的。auto_ptr的缺点是:一个对象指针不能被多个智能指针对象所拥有,限制了其应用范围。share_ptr则避免了这个缺点。
2024-05-11 20:19:47
241
1
原创 C++智能指针是什么?
C++标准库有4种智能指针:std::auto_ptr,C++98引入,目前已经抛弃不用。std::unique_ptr,独占智能指针std::shared_ptr,共享智能指针std::weak_prt,弱共享指针,主要是为了解决shared_ptr的问题。所谓智能指针,其本质是一个类模板,它可以创建任意类型的指针对象,当智能指针使用完成后,对象就会自动调用析构函数去释放该指针指向的内存空间。
2024-05-11 15:00:28
291
1
原创 C++:Vector 去重,并且保持顺序不变的方法
这行代码返回的就是新的iterator,并且指向被删除的数据后面那个数据。注意:调用erase后,原来的iterator就失效了,会变成野指针。因此必须重新给iterator赋值。其原理是,从vector的第二个数据开始,如果从vector起始找到相同的数据,则把自身删除。这样一直循环到vector的最后一个数据。
2024-05-10 19:57:19
558
1
原创 C++为什么要引入右值概念(三)
我的意见是:引用就是地址,右值引用实际上就是把地址转为另外一种类型,从而可以调用不同的赋值函数(移动赋值函数)。这个是由编译器来决定的。但也有人提出不同意见:如果是地址,那么为什么一个地址要分为左值引用和右值引用呢?以上只是个人意见,如果您有不同的见解,欢迎探讨。一般理解,对象的引用就是对象的地址。
2024-05-08 19:54:50
126
原创 C++为什么要引入右值概念(二)
如果在类中重载了移动赋值函数,那么代码:b1 =a 就会调用拷贝赋值函数,而代码b2 = move(b)则调用移动赋值函数。move(b)的作用就是把左值引用转为右值引用。由此我们得出结论,之所以引入右值引用,其实就是为了能够根据参数不同来调用不同的赋值函数。如果赋值操作的右边参数为左值引用,那么调用拷贝赋值函数,反之如果为右值引用,则调用移动赋值函数。这个是由系统编译的时候来确定的。并且如果进行了移动赋值,那么被移动的对象则不可再使用,因为其内存所有权已经移交给被赋值的对象。
2024-05-08 19:32:44
290
原创 C++为什么要引入右值概念(一)?
C++最早没有右值的概念,自从C++11以后引入右值概念。那么什么是右值呢?举例如下:int a = 10;a就是传统的变量,称为左值。10为常量,称为右值。左值是可以取得其地址的,右值是不能取得其地址的。我们可以用&a来取得变量a的地址,但10不能使用&符号,因此a为左值,10为右值。函数的返回值也是一个右值。此函数返回一个sum,我们无法取得sum的地址,因此函数的返回值是一个右值。那么为什么C++ 11要引入右值的概念呢?我们先举一个例子。
2024-05-08 18:14:54
523
原创 C++函数对象的使用
如果一个类重载了运算符(),那么这个类的对象就是函数对象在IntCompare类中重载了运算符(),那么这个类的对象叫做函数对象。
2024-05-07 16:54:21
487
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人