C 必知必會 賦值和初始化並不相同

2021-05-25 02:54:28 字數 599 閱讀 5986

賦值發生於當你賦值時,除此之外,遇到所有其他的複製的情形均為初始化,包括宣告、函式返回、引數傳遞以及捕獲異常中的初始化。

假定其賦值操作符的函式如下,並且string中有乙個private的s_成員:

string &

string::operator

=( const char *str ) 

對於內建型別來說,這兩個動作的區別可能不是很明顯。

對於複雜的使用者自定義型別來說,目標在採用源重新初始化之前必須被清理掉;這樣看,賦值有點像乙個析構函式後跟著乙個建構函式(當然要先判斷=左右是否是同乙個object)。

正是由於乙個正當的賦值操作會清掉左邊的實參,因此永遠不要對乙個未初始化的儲存區執行使用者自定義的賦值操作:

在這個例子中,names指向未初始化的儲存區,因為我們直接呼叫了operator new,從而避免了通過string的預設建構函式執行的隱式初始化動作,因此names指向一塊填充著隨機位的記憶體。當string賦值操作符在第二行 **中被呼叫時,它試圖對乙個未初始化的指標執行乙個array delete操作。 (哇哈哈,知道建構函式的好處了吧!)

sql必知必會的資料初始化

之前已經配置好mysql的工作環境,但是還缺少可以進行操作的檔案,即缺少對應的乙個資料庫和其中的5個表。在mysql中輸入 create database orderdb 不要忘記分號,這是mysql的語法。另外,mysql對大小寫不敏感的,因此也可以用 create database orderd...

《SQL必知必會》學習筆記(一) 實驗資料初始化

摘要 本文主要提供 sql必知必會 一書中實驗所用的資料庫,以及建立資料庫 表 約束和初始化的sql語句。1 實驗環境 作業系統 windows7 旗艦版 64位 dbms 5.6.27 mysql community server gpl 1.1 mysql的安裝和配置 2 資料庫和表的建立 按照...

mysql表數數初始化 sql必知必會的資料初始化

之前已經配置好mysql的工作環境,但是還缺少可以進行操作的檔案,即缺少對應的乙個資料庫和其中的5個表。資料庫的建立 在mysql中輸入 create database orderdb 不要忘記分號,這是mysql的語法。另外,mysql對大小寫不敏感的,因此也可以用 create database...