首頁  >  問答  >  主體

C++中关于string的析构函数

今天偶然用到string, 发现string的析构函数特别奇怪, 直接调用居然报错, 代码如下 :

int main(int argc, char* argv[]) {
    std::string x = "123";
    x.~string();
    return 0;
}

这是报错信息 :

/Users/zhangzhimin/ClionProjects/geek/main.cpp:16:8: error: identifier 'string' in object destruction expression does not name a type
    x.~string();

求解答.

天蓬老师天蓬老师2764 天前587

全部回覆(3)我來回復

  • 怪我咯

    怪我咯2017-04-17 14:28:08

    樓上搞笑的?

    正解是std::string這個東東其實只是std::basic_string<char>的typedef,所以如果你要調它的析構函數才對:

    x.~basic_string()

    另外你這string又不是new出來的,沒必要調析構

    回覆
    0
  • 巴扎黑

    巴扎黑2017-04-17 14:28:08

    題主你成功地吸引了我的注意。 。 。

    如果之前沒用using語句打開命名空間的話,呼叫析構函數要這麼寫:
    x.std::string::~string();

    我猜你這麼寫,是為了在空間配置器中手動析構物件

    回覆
    0
  • PHP中文网

    PHP中文网2017-04-17 14:28:08

    啊,string的確是basic_string<>的typedef出來的,不過string直接呼叫~string()是可以的。題主應該是缺少std名字空間的問題吧。實踐是檢驗真理的標準,,我試了一下編譯運行成功。這裡有string的說明題主http://www.cplusplus.com/refe...

    #include <iostream>
    #include <string>
    
    using namespace std;
    
    int main()
    {
        string str("hello");
        str.~string();
        return 0;
    }

    回覆
    0
  • 取消回覆