当前位置导航:炫浪网>>网络学院>>编程开发>>C++教程>>C++进阶与实例

C++编程中的一些不太常用C++语法

  1. placement new 方法

    如:pi = new (ptr) int; //placement new

    括号里的参数是一个指针,它指向一个内存缓冲器,new操作将在这个缓冲器上分配一个对象。Placement new的返回值是这个被构造对象的地址(比如扣号中的传递参数)。placement new主要适用于:在对时间要求非常高的应用程序中,因为这些程序分配的时间是确定的;STL 标准库中 allocator 空间分配器, 就使用了这个语法。
 
  先使用 malloc 分配内存p. 然后 在该内存内构造自己的类对象   new(p) T1(value) ; T1 是构造的类型,value 是类型的值
 
  2. naked function

    当你的函数内部较简单,用不到太多寄存器。或者需要根据上下文决定一些寄存器变量的时候。可以用naked 函数。对于一般的函数,如果必要的话,进入函数时编译器会产生代码来保存ESI,EDI,EBX,EBP寄存器,退出函数时则产生代码恢复这些寄存器的内容。naked call不产生这样的代码。使用naked函数,我们可以自己编写干干净净的函数,特别是当你代码没有使用这些寄存器的时候。可以像内联函数一样,省略一些操作。
 

 void __declspec(naked) MyNakedFunction()
        {
            // Naked functions must provide their own prolog.
            __asm
            {
                PUSH EBP
                MOV ESP, EBP
                SUB ESP, __LOCAL_SIZE
            }

            // And we must provide epilog.
            __asm
            {
                POP EBP
                RET
            }
        }


  3. 指向类成员函数的指针

    在MFC库中很多窗口基类中调用派生类的消息处理函数。因为windows消息众多,如果为每个消息都设立虚函数,而每个虚函数都占用4 bytes,那样很多类体积将非常庞大。而且有些地方基类设计时考虑到派生类在此可能要作些处理,又不想使用虚函数的话也可以使用指向成员函数的指针。如下面的类。如果派生类没有修改pf成员,在release中  (this->*pf)() 将被优化掉。而且使用指向成员函数的指针也不用定死函数名字。

 class animate
{
typedef void (animate::*pfun)();
public:
    animate() {pf=static_cast<pfun>(donothing);}
    void sleep()
    {   
        cout<<"animate sleep"<<endl;
        (this->*pf)();       
    }
    void donothing(){}
pfun pf;
};

 

共2页 首页 上一页 1 2 下一页 尾页 跳转到
相关内容
赞助商链接