青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

醬壇子

專注C++技術 在這里寫下自己的學習心得 感悟 和大家討論 共同進步(歡迎批評!!!)

  C++博客 :: 首頁 :: 聯系 :: 聚合  :: 管理
  66 Posts :: 16 Stories :: 236 Comments :: 0 Trackbacks

公告

王一偉 湖南商學院畢業 電子信息工程專業

常用鏈接

留言簿(19)

我參與的團隊

搜索

  •  

積分與排名

  • 積分 - 388786
  • 排名 - 64

最新隨筆

最新評論

閱讀排行榜

評論排行榜

The PIMPL idiom

In C++ when anything in a header file changes, all code that includes the header (either directly or indirectly) must be recompiled. To minimalize this we use PIMPL idiom:

// file x.h
class X
{
public:
// public members
protected:
// protected members
private:
// pointer to forward declared class
class XImpl *pimpl_;  // opaque pointer
};

Questions: -- What should go into XImpl? Options are:

  • Put all private data but not functions into XImpl.: Not too bad, but there is better

  • Put all private members into XImpl.

  • Put all private and protected members into XImpl. Bad, protected members must be in X

  • Make XImpl entirely the class that X would have been, and write X as only the public interface made up entirely of simple forwarding functions (handle/body variant).

-- Does XImpl require a pointer back to the X object?

Caveats:

  • You can't hide virtual member functions in the Pimpl (here private inheritance differs from membership)

  • Functions in Pimpl may require a "back pointer" to the visible object (by convention that is called: self_.

  • Often the best compromise is to use Option 2, and in addition to put into XImpl only rhose non-private functions that need to be called by private ones.

  • 4th is better over 2nd not needed "back pointer", but X is useless for inheritance.

PIPML has some drawbacks, like allocating/deallocating objects in the heap, which could be slow.

What about this "optimalization"?

// file: y.h
class Y
{
//...
static const size_t sizeofx = /* ... */;
char x_[sizeofx];
};
// file: y.cpp
#include "x.h"
Y::Y()
{
assert( sizeofx >= sizeof(X) );
new(&x_[0]) X;
}
Y::~Y()
{
(reinterpret_cast<X*>(&x_[0]))->~X();
}

Questions:

  • What is the Pimpl space overhead?

  • What is the performance overhead?

Space overhead:

#include <iostream>
using namespace std;
struct X {
char c;
struct XImpl *pimpl_;
};
struct XImpl { char c; };
int main()
{
cout << sizeof(XImpl) << '\t' << sizeof(X) << endl;
return 0;
}
// result: 1    8

Runtime overhead:

  • allocation/deallocation cost: relativelly expensive

  • indirect access of private members (+ back pointer)

  • alignment problems: new guaranties, that object will align properly, char[] buffers doesn't!

  • X must not use the default assignmentoperator=()

  • If sizeof(XImpl) grows greater then sizeofx, we need to update the source.

// file x.h
class X
{
//...
struct XImpl *pimpl_;
};
// file x.cpp
#include "x.h"
struct XImpl
{
// private stuff here ...
static void *operator new(size_t)   { /*...*/ }
static void *operator delete(void*) { /*...*/ }
};
X::X() : pimpl_( new XImpl ) { }
X::~X() { delete pimpl_; pimpl_ = 0; }
posted on 2007-07-16 14:51 @王一偉 閱讀(1320) 評論(0)  編輯 收藏 引用
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            久久亚裔精品欧美| 你懂的国产精品永久在线| 欧美黄色小视频| 欧美电影打屁股sp| 9l视频自拍蝌蚪9l视频成人| 亚洲欧洲美洲综合色网| 欧美精品导航| 亚洲欧美一区二区激情| 欧美一区二区成人6969| 国产色产综合色产在线视频| 久久视频一区| 欧美金8天国| 午夜在线a亚洲v天堂网2018| 久久精品国产清高在天天线| 最新中文字幕亚洲| 99一区二区| 国内自拍视频一区二区三区| 亚洲福利专区| 国产美女精品视频| 欧美成人免费在线| 国产精品久久7| 免费欧美视频| 国产精品美女久久久免费| 免费观看久久久4p| 国产精品久久久久秋霞鲁丝 | 国产精品另类一区| 久久精品卡一| 欧美高清自拍一区| 久久精品国产久精国产爱| 欧美激情1区| 久久婷婷麻豆| 国产精品手机视频| 亚洲人成在线播放| 伊人久久大香线蕉综合热线 | 欧美在线黄色| 欧美人成在线| 欧美阿v一级看视频| 国产精品欧美一区二区三区奶水| 亚洲第一在线视频| 国产日韩在线不卡| 国产精品99久久久久久久久久久久| 国产亚洲精品7777| 亚洲一区免费网站| 久久天堂成人| 欧美一区二区日韩一区二区| 欧美金8天国| 欧美高清视频| 悠悠资源网久久精品| 欧美亚洲一级片| 午夜欧美精品| 国产精品久久77777| av成人免费观看| 99re66热这里只有精品4| 久久天天综合| 欧美顶级少妇做爰| 在线观看国产一区二区| 欧美综合国产| 久久久www免费人成黑人精品 | 久久久久成人网| 久久国产欧美| 国产一区导航| 久久精品国产第一区二区三区最新章节 | 久久久久国产精品厨房| 久久精品国语| 激情综合在线| 久热精品在线视频| 欧美成人高清视频| 91久久精品日日躁夜夜躁欧美 | 亚洲在线中文字幕| 西西裸体人体做爰大胆久久久| 欧美视频一区二区三区在线观看 | 久久精品官网| 精品69视频一区二区三区| 久久久av网站| 亚洲福利久久| 中文网丁香综合网| 国产精品地址| 欧美在线视频导航| 欧美激情一级片一区二区| 亚洲精品韩国| 国产精品久久久久久久久免费樱桃 | 久久综合久色欧美综合狠狠| 亚洲电影免费观看高清完整版在线观看 | 亚洲精品美女91| 亚洲欧美网站| 精品动漫3d一区二区三区免费| 久久久亚洲综合| 亚洲九九爱视频| 欧美一区二区三区男人的天堂| 国内外成人在线视频| 欧美二区在线播放| 亚洲一区精品电影| 欧美不卡视频| 久久夜色精品国产欧美乱| 中文一区二区| 国产亚洲精品aa午夜观看| 女仆av观看一区| 在线视频免费在线观看一区二区| 久久精品国产亚洲a| 亚洲欧美国产另类| 亚洲黄色免费电影| 久久gogo国模啪啪人体图| 亚洲国产精品999| 国产精品99免费看 | 亚洲综合第一页| 欧美国产一区二区在线观看| 一本色道久久综合亚洲精品小说| 国产精品手机视频| 欧美伦理91i| 久久久久久久久伊人| 亚洲视频久久| 亚洲第一网站| 久久在线观看视频| 亚洲欧美日产图| 亚洲精品久久嫩草网站秘色| 国产丝袜一区二区| 欧美午夜三级| 欧美日韩调教| 欧美91精品| 久久久久久亚洲综合影院红桃 | 美女诱惑一区| 久久高清一区| 亚洲欧美中文另类| 99精品视频网| 亚洲日本在线观看| 在线日韩中文字幕| 国产农村妇女精品| 欧美日韩一区二区在线视频| 另类av一区二区| 久久久久在线观看| 久久国产一区| 欧美在线综合视频| 欧美有码视频| 午夜精品久久一牛影视| 亚洲视频在线观看| 亚洲午夜精品网| 亚洲一区二区高清| 亚洲一区二区不卡免费| 亚洲色图自拍| 亚洲一区二区三区三| 亚洲综合国产| 亚洲综合激情| 久久成人综合视频| 久久免费视频观看| 免费毛片一区二区三区久久久| 久久精品人人做人人综合| 久久久久久久久久久久久久一区| 欧美一区精品| 久久久久久久综合日本| 久久网站热最新地址| 美女露胸一区二区三区| 牛夜精品久久久久久久99黑人| 欧美成人一区在线| 欧美日韩一区在线观看视频| 欧美日韩激情小视频| 国产精品乱人伦中文| 国产一区二区| 91久久中文| 亚洲少妇最新在线视频| 亚洲一区欧美激情| 欧美亚洲在线播放| 久久婷婷蜜乳一本欲蜜臀| 欧美成人综合在线| 99国产精品久久久久久久| 亚洲香蕉网站| 久久精品一本| 欧美91视频| 亚洲美女视频在线观看| 亚洲一区久久久| 久久婷婷国产综合尤物精品| 欧美精品入口| 国产伪娘ts一区| 亚洲看片网站| 欧美在线电影| 亚洲国产精品免费| 亚洲影音先锋| 免费成人性网站| 国产精品久久久久久久免费软件| 国产亚洲欧美另类中文| 亚洲日本免费电影| 欧美一区二区在线免费播放| 欧美成人久久| 亚洲女同同性videoxma| 裸体女人亚洲精品一区| 国产精品久久久久久久久免费桃花| 黄色成人在线| 亚洲欧美日韩精品久久| 亚洲大胆av| 久久精品国产69国产精品亚洲| 欧美久久成人| 1024国产精品| 久久国产精品久久久久久久久久| 亚洲国产精品一区二区第一页| 午夜精品久久久久久久| 欧美日韩一区二区国产| 亚洲黄色成人| 麻豆成人在线播放| 欧美一区2区三区4区公司二百| 欧美日韩亚洲在线| 亚洲欧洲精品一区二区|