《C 沉思錄》通過控制代碼來避免不必要的物件的複製

2021-04-07 13:13:01 字數 1038 閱讀 5917

class point     //乙個point類

int x(void) const

int y(void) const

point &x(int xv)

point &y(int yv)

private:

int xval, yval;

};class upoint    //通過乙個類來控制物件,以及它的計數器

upoint(int x, int y) : p(x, y), u(1)

upoint(const point& p0) : p(p0), u(1)

};class handle

handle(int x,int y) : up(new upoint(x, y))

handle(const point& p) : up(new upoint(p)) {}

handle(const handle* h) :up(h->up)

handle& operator=(const handle& h)

up = h.up;

return *this;

}~handle(void)

}int x(void) const

handle& x(int x0)

up->p.x(x0);

return *this;

}int y(void) const ;

handle& y(int y0)

up->p.y(y0);

return *this;

}private:

upoint *up;

};在上面的程式中,的確避免的不必要的物件複製,只需要乙個控制代碼我們就可以高效的使用這個物件。同時,在這段**中還有乙個問題:我們都要借助乙個類(upoint)來使用這個物件,將控制代碼邦定到該物件上,但是如果這個物件是未知的話,也就是說根本就不知道要將這個控制代碼邦定到那個物件上,這是我們也就無從定義upoint。針對這一問題提出了新的解決方法,其主要思想是:將引用計數從資料中分離出來,把引用計數加到handle中去,也就不用往物件上邦定任何東西。

避免不必要的float

float中文翻譯為浮動,很形象的翻譯,在css很常用,當你需要吧兩個塊級元素定排放在同一高度上經常會用到float,先看一下float的 屬性。先看一下float可能的值 float left 元素向左浮動 float right 元素向右浮動 float none 不浮動 float inher...

避免不必要的物件

一般來說,最好能重用物件而不是在每次需要的時候就建立乙個相同功能的新物件。重用方式既快速,又流行。如果物件是不可變的,它就始終可以被重用。最為乙個極端的反面例子,考慮下面的語句 string s new string string don t do this 該語句每次被執行的時候都建立乙個新的st...

避免建立不必要的物件

下面是乙個比較微妙也比較常見的反面的例子,其中涉及可變的date物件,他們的值一旦計算出來之後就不再變化。這個類建立了乙個模型 其中有乙個人,並有乙個isbabyboomer方法,用來檢驗這個人是否為乙個babyboomer,換句話說,就是檢驗這個人是否出生於1946年至1964年之間。public...