任何情況,都不能手動呼叫解構函式的。
如果是棧物件,自動釋放,不需要呼叫。
如果是堆物件,delete它的時候,就呼叫了解構函式。
int main() {
std::string s;
//s.~string(); //error: identifier "string" in object destruction expression does not name a type
//上面這句程式碼 實際是為了呼叫 string的某個函式。換成其他函式也可以。看下面修改的程式碼
return 0;
}
//修改之後
#include<stdio.h>
#include<string>
std::string s = "123"; //因為這裡前面加了 std:: 所以前面使用和不使用using std::string是沒有區別的
printf("string length = %u\", s.size());
因為C++的類有很多很多,為了歸類管理,就加入了名稱空間 ,比如std就是。
std下面有個類叫 string
比如說假設 abc名稱空間下也有個類叫string。那麼編譯的時候,編譯器就不知道你用的哪一個類。就需要用名稱空間限制一下,就好比作業系統的資料夾一樣。
比如C:/aaa.txt。如果直接用aaa.txt 系統就不知道你用的哪一個檔案。
而使用using std::string 就類似在程式開始就告訴程式,我的當前目錄在C盤,那麼後面讀取檔案都再C盤下(舉個例子),實際含義是告訴編譯器,後面出現的string 都指的是std::string
任何情況,都不能手動呼叫解構函式的。
如果是棧物件,自動釋放,不需要呼叫。
如果是堆物件,delete它的時候,就呼叫了解構函式。
int main() {
std::string s;
//s.~string(); //error: identifier "string" in object destruction expression does not name a type
//上面這句程式碼 實際是為了呼叫 string的某個函式。換成其他函式也可以。看下面修改的程式碼
return 0;
}
//修改之後
#include<stdio.h>
#include<string>
int main() {
std::string s = "123"; //因為這裡前面加了 std:: 所以前面使用和不使用using std::string是沒有區別的
printf("string length = %u\", s.size());
return 0;
}
因為C++的類有很多很多,為了歸類管理,就加入了名稱空間 ,比如std就是。
std下面有個類叫 string
比如說假設 abc名稱空間下也有個類叫string。那麼編譯的時候,編譯器就不知道你用的哪一個類。就需要用名稱空間限制一下,就好比作業系統的資料夾一樣。
比如C:/aaa.txt。如果直接用aaa.txt 系統就不知道你用的哪一個檔案。
而使用using std::string 就類似在程式開始就告訴程式,我的當前目錄在C盤,那麼後面讀取檔案都再C盤下(舉個例子),實際含義是告訴編譯器,後面出現的string 都指的是std::string