Welcome toVigges Developer Community-Open, Learning,Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
317 views
in Technique[技术] by (71.8m points)

关于调用析构函数的问题?

#include <string>

int main()
{
    std::string s;
    s.~string();

    return 0;
}

这种写法 g++ 和 clang++ 都报错

s.std::string::~string();

这么写只有 clang++ 报错, g++ 通过编译

在不用 using声明 的情况下,如何写才能让 g++ 和 clang++ 同时通过编译?

版本:
g++ 10.1.0
clang++ 10.0.0


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

这可能是 clang 的一个 bug。不过可能没有什么人用,于是也没有什么人关注 ...

clang 报的错误是这里不是一个 class_name ,那么给它一个 class_name 就好了。std::string 只是 std::basic_string<char> 的一个 typedef ,那么用 s.std::string::~basic_string(); 就行了。

===================

你这个程序有未定义行为,s 会被析构两次。


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to Vigges Developer Community for programmer and developer-Open, Learning and Share

2.1m questions

2.1m answers

63 comments

56.6k users

...