C++的class本质上是值语义的,它在作为函数返回值时可能会造成不必要的拷贝
返回值优化(RVO)返回值优化是编译器对返回一个值语义对象时进行的优化,这有助于性能优化
假如我们有一个Foo类,它的定义如下所示
class Foo {
public:
Foo() {
cout << "...
阅读全文
eventfd是Linux提供的一个进程/线程间通信的一种方式,它是一个文件描述符,所以可以使用read/write。
在我们编写Reactor模式的服务器程序时,每个I/O线程都会有一个event loop,而这些线程会阻塞于epoll_wait(Linux系统)
我们在给这些线程分发任务时,需要唤醒阻塞这些线程,而eventfd可以加入到epoll中,所以我们可以使用eventfd来实现唤醒线程
阅读全文
之前学校用的是老版正方教务系统,也写过文章,而最近学校更换了教务系统,作为计算机的学生,当然还是看看能不能写个脚本抢下课啦。
具体用的时候也需要加点多线程的功能,我大概开了15个线程吧,不得不说学校这次的教务系统的服务器比之前的好了。
成果大概就是帮一位女同学成功抢到了课(主要是脚本也没有扩散,毕竟如果多人使用这种脚本对服务器还是有点影响的
模拟登录请求第一步是登录一次教务系统,然后抓包看...
阅读全文
初次遇到std::forward是在阅读std::make_shared源码时看到的,当时不少很能理解为什么这可以达到完美转发的目的。这里来总结一下。
引用折叠std::forward的出现是因为C++11右值语义的出现,而有时候我们需要写下面的代码进行参数的转发。
template<class T>
void foo(T&& arg) {
...
阅读全文
最近在写智能指针shared_ptr的实现,本以为是一个比较简单的轮子,但其实内部实现是比较复杂的,总的来说总共有以下几项。
内部数据结构的实现shared_ptr有两个私有成员,一个为指向对象指针,另一个为引用计数块的指针。
我刚开始以为内部只是一个指向对象指针和一个引用计数(比如size_t)的指针,其实内部构造并不是这么简单,智能指针shared_ptr需要满足下面几点。...
阅读全文