C++ pimpl 技法

C++ pimpl 技法

//
pimpl idiom .. 指向实现的指针

//
pimpl 这种做法还保障了二进制兼容性,让动态库的升级变得更容易。
//隐藏了实现的细节.
// C++代码  
//  A.h  

class  AImpl;  

class  A {  
public :  
    A();  
    
~ A();  
    
void  func();  

private :  
    A(
const  A & );  
    
void   operator = ( const  A & );  
    AImpl
*  impl_;  
};  

//  A.cpp 

class  AImpl {  
public :  
    
void  func();  
private :  
    
int  myFunc(int myParam);  
private :  
    int  _myVariable;  
};  

A::A()  
: impl_(
new  AImpl)  
{  
}  

A::
~ A()  
{  
    delete impl_;  
}  

void  A::func()  
{  
    impl_
-> func();  
}  


 
//  A.h  
// pimplidiom 指向实现的指针
// pimpl 这种做法还保障了二进制兼容性,让动态库的升级变得更容易。
// 隐藏了实现的细节.
#pragma once

class  A {  
public :  
    A();  
    
~ A();  
    
void  func();  

private :  
    A(
const  A & );  
    
void   operator = ( const  A & );  
    
class  AImpl;   //  声明,不是定义  
    AImpl *  impl_;
}; 

//  A.cpp  
//  在这里定义,完全不暴露  
#include  " a.h "
class  A::AImpl {  
public :  
    
void  func(){
        
    }
private :  
    
int  myFunc( int  myParam);  
private :  
    
int  _myVariable;  
};  

A::A()  
: impl_(
new  AImpl)  
{  
}  

A::
~ A()  
{  
    delete impl_;  
}  

void  A::func()  
{  
    impl_
-> func();  
}  

你可能感兴趣的:(C++ pimpl 技法)