關于會話記錄Session的實現
摘要: Session的適用性很廣,翻譯為‘會話’,最初接觸他的時候在做web方面,可以記錄一個用戶的會話記錄,當關閉瀏覽器的時候失效!Session實際上是一個特定的時間概念. 在最開始接觸它時沒有刻意的研究實現與擴展性,然后最近的一個工程有這... 閱讀全文posted @ 2009-04-22 20:53 expter 閱讀(1449) | 評論 (1) | 編輯 收藏
成都游戲Coder,記錄游戲開發過程的筆記和心得!
posted @ 2009-04-22 20:53 expter 閱讀(1449) | 評論 (1) | 編輯 收藏
本周公司游戲公測,然后也玩了此玩游戲,同時也比較關心游戲的運營狀態,畢竟是公司第一款游戲。
雖然沒有參與此游戲的開發,但是看了server部分的代碼,可以通過此次運營游戲的問題,來提醒自己以后盡量不要出現此問題,或者是提供一個更好的解決方案。
本周在公司沒做多大的事情,游戲公測,我也跑去玩游戲去了,雖然沒有太大的網游天賦,但是還是盡量通過看的資料與代碼在結合游戲來熟悉各個環節,為自己以后開發做好一定的基礎。
本周清明節,放假3天,放假第一天先是回校和朋友們耍了,然后一起去圖書館還書,在借書,然后收到3G門戶人事的一些信息。放假第二天電腦出問題了,我寫的代碼用VS2005,VC6 一link就會死機,只有拔電源。我也不知道什么BUG。郁悶慘了,重裝系統問題依舊。陷于崩潰,最后打了幾盤Z3,緩解了下心情,然后只有用DEV了。晚上換了以前的Solaris,安裝了Ubuntu8.10,當然是虛擬機。放假第三天,和朋友逛了家樂福,下午睡覺,看了下畢業設計,有一些頭緒了。 然后晚上看了會書。三天放假就這樣過去了,感覺就像一宅男,下午和媽媽聊天,他喊我出去處處逛逛,我說一個人沒撒好逛的,已在叮囑我多吃,吃多點,感覺在父母眼中還是個小孩。。 這周看了2部電影,很好看,很好看,一部勵志電影《當幸福來敲門》 一部很感人的愛情片《八月迷情》。
同時最近看了些書與代碼,感覺收獲蠻大,風格和注意問題都有提高。希望能再接再厲,保持狀態,努力學習!
posted @ 2009-04-06 23:55 expter 閱讀(400) | 評論 (0) | 編輯 收藏
posted @ 2009-04-04 21:25 expter 閱讀(539) | 評論 (1) | 編輯 收藏
template<class T>
class Array

{
public:
explicit Array(int _size = 0);
T & operator [](int index);

};
Array<int> a(10);
Array<int> b(10);
if (a == b[i])

{
// 如果沒有加explicit,可以編譯通過,加了就不能通過
}
// 要轉換可以使用
if (a == static_cast<int> b[i])

{
..
}
#define STR(ST) #ST
對于ma等關聯容器的元素刪除
map<int,int> mp;
for (map<int,int>::iterator it = mp.begin(); it != mp.end();)

{
if (
) //滿足刪除條件
{
mp.erase(it++);//刪除當前節點,并返回下一個元素,自加
}
else
{
it++;
}
}
對于vector等標準容器的元素刪除
vector<int> ve;
for (vector<int>::iterator it = ve.begin(); it != ve.end();)

{
if (
) //滿足刪除條件
{
it = ve.erase(it);
}
else
{
it++;
}
}
關于2者區別主要是erase返回值問題,可以在網上查相關的說明,pool 庫引入了可用于實現快速內存分配的工具。正確的內存塊對齊可以得到保證。
根據 Boost 文檔所述,當您分配和釋放許多小型對象時,建議使用池。使用池的另一個不太明顯的優點在于,作為程序員,您不必擔心內存泄露:內存由 Boost 庫在內部自動進行管理。要使用 pool 庫,您不必在鏈接時提供特定的庫——單憑頭文件就足以完成鏈接了。 有多個接口對 pool 庫可用:
關于Boost pool可以閱讀
http://www.ibm.com/developerworks/cn/aix/library/au-util_boost_lib/
template<typename TyVal>
class Lock

{
public:
explicit Lock()
{}
explicit Lock(TyVal val):_val(val)
{
//加鎖
}
~Lock()
{//釋放}
private:
TyVal _val;
};
如果我們有一段代碼需要加鎖,則可以直接使用
vector<int> Vint;
Lock<vector<int> > lock(Vint);
可以直到lock的聲明周期結束,釋放資源
struct Test

{
//
Test & operator = (const Test &_t)
{
//關于此處是否需要增加一個 _t與*this的判斷,
memcpy(this,&t,sizeof(t));
return *this;
}
//
};posted @ 2009-03-29 22:28 expter 閱讀(2904) | 評論 (7) | 編輯 收藏
都是這周看書以及代碼的總結:
Stl 中 auto_ptr只是眾多可能的智能指針之一,auto_ptr所做的事情,就是動態分配對象以及當對象不再需要時自動執行清理。
這里是一個簡單的代碼示例,如果沒有auto_ptr,
void ProcessAdoption(istream &data)

{
while (data) // 如果還有數據
{
ALA *pa = readALAData(data); // 取出下一個數據
pa->DealProcessAdoption(data); // 處理
delete pa; // 釋放資源
}
return;
}
如果在DealProcessAdoption有一個exception,會發生什么事情,因為ProcessAdoption不能捕獲他,所以這段代碼很危險,所以DealProcessAdoption后面的代碼可能會跳過,造成內存泄露。
如果利用try catch去捕獲他,會搞得代碼很亂,又缺少美觀性。
所以Stl提供了一個智能指針來解決這個問題,我們可以先模擬實現一個智能指針的類實現。
// 關于一個智能指針的定義
template<typename Type>
class auto_ptr

{
public:
auto_ptr(T *p =NULL) :Ptr(p)
{ }
~auto_ptr()
{
delete Ptr;
}
private:
Type *Ptr;
};

void ProcessAdoption(istream &data)

{
while (data) // 如果還有數據
{
auto_ptr<ALA> pa(readALADara(data));
pa->DealProcessAdoption(data);
}
return;
}
這個版本和原先版本的差異只有二處,
第一pa是一智能指針的對象,不是ALA*
第二不用自己去釋放delete
然后我看到Effective STL的條款
8:永不建立auto_ptr的容器
關于此可以看的Effective STL的條款8
因為auto_ptr并不是完美無缺的,它的確很方便,但也有缺陷,在使用時要注意避免。首先,不要將auto_ptr對象作為STL容器的元素。C++標準明確禁止這樣做,否則可能會碰到不可預見的結果
auto_ptr的另一個缺陷是將數組作為auto_ptr的參數: auto_ptr<char> pstr (new char[12] ); //數組;為定義
然后釋放資源的時候不知道到底是利用delete pstr,還是 delete[] pstr;
然后收集了關于auto_ptr的幾種注意事項:
1、auto_ptr不能共享所有權。
2、auto_ptr不能指向數組
3、auto_ptr不能作為容器的成員。
4、不能通過賦值操作來初始化auto_ptr
std::auto_ptr<int> p(new int(42)); //OK
std::auto_ptr<int> p = new int(42); //ERROR
這是因為auto_ptr 的構造函數被定義為了explicit
5、不要把auto_ptr放入容器
然后筆者從而推薦的是boost的shared_ptr,然后看完shared_ptr關于智能指針的介紹與例子。
5種針對auto_ptr不足的指針如下:需要詳細了解可以去查看相當文檔,與測試新代碼。
| scoped_ptr | <boost/scoped_ptr.hpp> | 簡單的單一對象的唯一所有權。不可拷貝。 |
| scoped_array | <boost/scoped_array.hpp> | 簡單的數組的唯一所有權。不可拷貝。 |
| shared_ptr | <boost/shared_ptr.hpp> | 在多個指針間共享的對象所有權。 |
| shared_array | <boost/shared_array.hpp> | 在多個指針間共享的數組所有權。 |
| weak_ptr | <boost/weak_ptr.hpp> | 一個屬于 shared_ptr 的對象的無所有權的觀察者。 |
| intrusive_ptr | <boost/intrusive_ptr.hpp> | 帶有一個侵入式引用計數的對象的共享所有權。 |
關于shared_ptr的使用其實和auto_ptr差不多,只是實現上有差別,關于shared_ptr的定義就不貼代碼了,以為內開源,可以網上找
1、shared_ptr<T> p(new Y);
要了解更多關于auto_ptr的信息,可以查看more effective c++ 的p158頁條款28
要了解shared_ptr 類模板信息,可以查看boost 1.37.0中文文檔,而且支持數組的shared_array 類模板
posted @ 2009-03-29 15:50 expter 閱讀(31354) | 評論 (5) | 編輯 收藏
這周末本來打算租房的,結果還是沒找到,很郁悶了,估計還得每天早起晚歸一周,原因有幾:房價太高,條件不好,都是中介舍不得中介費,家具配置也不咋全。
這周在fox的幫助下,終于把Netmonitor搞完了,平時還是得多看書,多學習。
周六找房子沒找到,實習論文懶得寫,晚上又真三了一盤。
周末去上了會自習,看了下書,閑時看了下朋友的公務員題目,看了幾道題有幾個不會,汗一個
題目如下: (猜數字)
1 . 1 2 3 35 .. 猜下個數字
2 . 1 3 4 1 9 猜下個數字
下周計劃:
1.沒事就多看書,多看代碼,多與其他人交流。
2.每天晚上多熟悉shell編程。
3、一定要確定房子。
4、提前一個月祝女友公務員考試成功。因為你生活更精彩!
posted @ 2009-03-08 16:28 expter 閱讀(428) | 評論 (2) | 編輯 收藏
posted @ 2009-03-08 14:58 expter 閱讀(1244) | 評論 (2) | 編輯 收藏
1、關于初始化:
deque<string> Deque;// 一個deque容器
deque<string> Deque2(Deque.begin(),Deque.end()); // 一種初始化
copy(Deque.begin(),Deque.end(),back_inserter(Deque2) ); // 一種初始化
deque<string> Deque3(istream_iterator<string>(cin),istream_iterator<string>()); // 一種初始化
typedef istream_iteraor<string> (Func)();
deque<string> Deque3(istream_iteraotr<string> cin, Func);
看上去像一個函數聲明,
typedef istream_iteraor<string> (Func)();
deque<string> f(stream_iteraor<string> ,Func);
現在比較清晰了吧,很像一個函數聲明了,
所以第三種初始化方式根本就不能做任何事情.
//如果真的要達到初始化的目標,可以通過括號來消除二義性
deque<string> Deque3( (istream_iterator<string> (cin)) , istream_iterator<string>() );
int main()

{
double x = 1e8;
while(x >0)
x--;

return 0;
}
#include <iostream>
#include <iomanip>
using namespace std;
int main()

{
int x = 1;
for (int i =0 ; i < 100; i++)
{
;
}
// 下面這行代碼會干些什么?遞增???????/
++x;
std::cout << x << std::endl;
return 0;
}
struct X 

{
static bool f(int *p)
{
return p &&0[p] and not p[1:>>p[2];
}
};先一步一步的分析
1:0[p] 其實和p[0]一樣
2: and not都是有效關鍵字 ,他們分別是&& 和!
3::>竟然也是合法的,他是]的雙字符寫法。
所以這個語句會被解析為 return p && p[0] && !p[1]>p[2] ,沒有語法錯誤。
很詭異。
posted @ 2009-03-08 14:05 expter 閱讀(1892) | 評論 (5) | 編輯 收藏
posted @ 2009-02-22 22:21 expter 閱讀(2032) | 評論 (12) | 編輯 收藏