• C++智能指针

    今天复习了一下智能指针,然后动了动脑子,恍然觉得以前并没有真正的理解智能指针。首先是shared_ptr,shared_ptr的作用就不做介绍了。那么shared_ptr是如何实现的呢?我分析了一下,智能指针的要点就是“计数”和“指针”。所以智能指针的成员变量中就必须有计数值和对象指针。

    指针计数为零的时候自动销毁,所以析构函数中需要实现计数和对象销毁的功能。然后还要注意的就是复制构造函数和复制函数(operator=)。想起来觉得也不难实现,于是就动手写了个丑陋版shared_ptr。

    #include <iostream>
    
    namespace toy{
    template<class T>
    class shared_pointer{
    
    public:
        template<class Y> explicit shared_pointer(Y* p) {
            px = p;
            shared_counter
    【查看更多】
  • 谈谈闭包

    我第一次听说“闭包”这个概念是在学习Lua的时候。由于此前并没有接触到函数式编程的语言,所以满脑子C/C++的思维方式的我被“闭包”困惑了很久。我找到了一个比较通俗的闭包定义:如果在一个内部函数里,对在外部作用域(但不是在全局作用域)的变量进行引用,那么内部函数就被认为是闭包(closure)。Lua的学习资料上一般都会有一个这样关于闭包的例子:

    function new_counter()  
        local n = 0 
        local function counter()        
            n = n + 1       
            return n    
        end 
        return counter
    end 
    
    c1 = new_counter()
    c2 = new_counter()
    print(c1())  //打印1 
    print(c2())  //打印2
    

    首先,new_counter()是一个返回函数的函数;然后这个被返回的counter函数会更改其外部函数(new_counter)的局部变量,并返回计数值。注… 【查看更多】

  • 多核程序设计——存储模型

    最近在看《现代体系结构上的UNIX系统——内核程序员的SMP和Caching技术》,这里抄点东西作为笔记吧!
    顺序存储模型强制存储器操作(load和store)都按照程序次序来执行,即这些指令是按照在随程序执行的指令流中出现的顺序次序来执行的。它也指定了,由不同处理器完成的load和store操作也要以某种顺序、但又是非确定性的方式排序。这种存储模型应该是大家最容易理解的,甚至都认为实际MP也是这样工作的。但是,这种存储结构是非常落后的,现代处理器应该已经淘汰了这种结构。
    书中讲到了一个例子,如下;

            处理器一           处理器二
            store %r1, A        store %r1, B
            load %r2, B        load %r2, A
    

    在强定序(strong order)的系统中,一共有四种可能的存储排序。但是可以肯定的是最后一条指令一定是load指令,也就是说至少有一条load指令会读… 【查看更多】

  • C++RTTI小总结

            RTTI算是C++的一大特性之一了,但也是一个不太好懂的特性。以前一直没有理解清楚RTTI。通过最近的学习,似乎掌握了一点皮毛,这里做一个小总结。首先是《C++编程思想》上的一个例子,由于缺头文件,我把容器改成了vector。

    #include <iostream>  
    #include <time.h>  
    #include <typeinfo.h>  
    #include <vector>  
    #include <stdlib.h>  //for srand() and rand()  
    using namespace std;  
      
    class shape {  
    protected:  
        static int count;  
    public:  
        shape() { count++; }  
        virtual ~shape() { 
    【查看更多】
  • C++静态成员变量

    今天在弄一段代码的时候遇到了静态成员变量的问题。卡了一段时间后,果断翻出《深入探索C++对象模型》,大概明白了问题所在。这事给我的一点启示就是“纸上得来终觉浅,绝知此事要躬行”。首先看看问题吧!其实就是一个类型的定义。代码如下:

    //myApplication.cpp  
    #include "myapplication.h"  
    #include <iostream>  
    using std::cout;  
    using std::endl;  
      
    myApplication::myApplication(string _appName):appName(_appName)  
    {  
        if(self!=0)  
            return;  
        else  
            self=this;  
    }  
    void myApplication::printAppname()  
    {  
        cout<<appName<<endl;  
    }  
    myApplication*
    【查看更多】
  • %%TITLE%%

    %%CONTENT%%… 【查看更多】