C++中关于string的析构函数
天蓬老师
天蓬老师 2017-04-17 14:26:08
0
3
601

今天偶然用到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();

求解答.

天蓬老师
天蓬老师

欢迎选择我的课程,让我们一起见证您的进步~~

membalas semua(3)
刘奇

楼上搞笑的?

正解是std::string这个东东实际只是std::basic_string<char>的typedef,所以如果你要调它的析构函数才对:

x.~basic_string()

另外你这string又不是new出来的,没必要调析构

巴扎黑

题主你成功地引起了我的注意。。。

如果之前没用using语句打开命名空间的话,调用析构函数要这么写:
x.std::string::~string();

我猜你这么写,是为了在空间配置器中手动析构对象

Ty80

啊,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;
}
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan