##沒有躲過的坑--成對使用new和delete時要采取相同的形式
new創建類對象與不new區別:
new創建類對象需要指針接收,一處初始化,多處使用?
new創建類對象使用完需delete銷毀?
new創建對象直接使用堆空間,而局部不用new定義類對象則使用棧空間?
new對象指針用途廣泛,比如作為函數返回值、函數參數等
而且每個學習C++編程的人都知道成對的使用new和delete,也也就是new申請的內存用delete釋放,new []申請的內存由delete []釋放。
~~~
std::string* first_string = new std::string;
std::string* second_string = new std::string[100];
delete first_string;
delete [] second_string;
~~~
這一規則,在實際工作中也應該牢記于心。但是我還是沒有躲過這個坑兒。
看看情況吧:
首先使用了typedef進行一些定義;
~~~
typedef std::string address_lines[4];
std::string *third_string = new address_lines;
delete third_string
~~~
這個就是遇到的坑兒,被表面所迷惑。
所以在Effectice C++中 item16就講到了:
最好盡量不要對數組形式做typedef動作。
- 前言
- deprecated關鍵字
- 指針(內存泄露)
- 頭文件相互包含(Compiler error C2653: not a class or namespace name)
- 獲取一張圖片的width和height
- This function or variable may be unsafe.
- 智能指針陷阱
- wstring與string的轉換
- windows下chrome瀏覽器插件不能安裝
- 重定義關鍵字
- 正確釋放vector的內存
- 獲取設備環境HDC
- 抽象類不能實例化對象(但是你明明定義的不是抽象類)
- 重載賦值運算符的自我賦值
- 程序中的變量未初始化
- 成對使用new和delete時要采取相同的形式
- 意想不到的除數為零
- map的初始化(插入數據)
- 正則表達式截取字符串
- 捕獲窗口之外的鼠標消息(鉤子還是??)
- 類中的靜態成員變量(static or const static)
- 有if就要有else(一定成對)
- map查找結果處理
- 使用using namespace std的壞習慣
- new一個指針數組、以及創建動態二維數組
- 使用太多的全局變量
- 沒有及時break出for循環
- vector使用erase后迭代器變成野指針
- C++函數的默認參數(重新定義默認參數)
- 0xC0000005: 讀取位置 xxx時發生訪問沖突
- std::string初始化、最快速判斷字符串為空
- 你開發的軟件安裝在C盤Program Files (x86)下產生的異常