9.C/C++
云水木石
70后程序员,仍然战斗在编码第一线,长期从事浏览器内核研发。
展开
-
调试Android native代码内存泄漏
对C/C++程序员而言,要说碰到最头疼的问题,无疑就是内存泄漏问题。解决内存泄漏问题似乎很简单,就是秉承一个原则:分配的内存一定要即时释放。然而在实际场景中,随着代码复杂度的增加,要遵守这一原则非常困难,而且随着面向对象、模块化、多线程的引入,更难以判断内存该由谁来释放。为了解决这一难题,C++引入了智能指针和引用计数等。然而引用计数无法解决两个对象相互持有对方引用而引起的内存泄漏。原创 2018-01-02 17:25:08 · 2884 阅读 · 0 评论 -
[C++11札记]: type traits简介
可能对很多C++程序员而言,Type Traits并不陌生,它被大量应用在模板元编程中。从字面上理解,Type Traits就是”类型的特征”的意思。在C++元编程中,程序员不少时候都需要了解一些类型的特征信息,并根据这些类型信息选择应有的操作。Type Traits有助于编写通用、可复用的代码。可能这些描述有些虚,下面就通过简单的例子来说明Type Traits是如何改善我们的C++代码的。原创 2018-02-05 21:44:47 · 6305 阅读 · 0 评论 -
[C++11札记]: lambda函数
作为一名C++程序员,看到如下代码你会是什么反应?int main() { int girls = 3, boys = 4; auto totalChild = [](int x, int y)->int{ return x + y; } return totalChild(girls, boys);}这段代码是不是和我们平常所见的C++代码有点不同?对...原创 2018-02-13 12:53:35 · 842 阅读 · 0 评论 -
[C++11札记] :智能指针
内存问题一直是C/C++程序员面临的重大挑战,就语言层面而言,主要问题有:野指针:一些内存单元已被释放,之前指向它的指针却还在被使用。这些内存有可能被系统重新分配给程序使用,从而导致了无法预测的错误。重复释放:程序试图去释放已经被释放过的内存单元,或者释放已经被重新分配过的内存单元,导致重复释放错误。内存泄漏:不再需要使用的内存单元如果没有被释放就会导致内存泄漏。如果程序不断地重复进行这...原创 2018-02-08 09:34:11 · 1009 阅读 · 0 评论 -
[C++11札记]: std::function
在C/C++中函数指针作为一种回调机制被广泛使用,但是函数指针在C++面向对象编程中有些不足,比如无法捕捉上下文。举个例子,使用对象的非静态成员函数作为函数指针就无法做到。仿函数在C++11之前,我们在使用STL算法时,通常会使用到一种特别的对象,称为函数对象,或者仿函数(functor),例子如下:class _functor {public: int operat...原创 2018-03-05 15:58:08 · 1171 阅读 · 0 评论 -
[C++ 11札记]: std::bind
在上一篇文章中,我们提到可调用对象(callable object),其中一种就是std::bind表达式。在这篇文章中,我们来谈谈std::bind表达式。关于std::bind的定义如下:template< class F, class... Args >/*unspecified*/ bind( F&& f, Args&&... ar...原创 2018-03-06 15:44:13 · 701 阅读 · 0 评论