C++ - std :: string :: ~string()字符串仍然可以打印为空值

Jos*_*eph -1 c++ string

当我和std::string我一起去的时候,我决定做以下事情:

int main(int argc, char **argv)
{
    std::string s = "Hello World";
    s.~basic_string();
    std::cout << s.c_str();
}
Run Code Online (Sandbox Code Playgroud)

但是,它什么都不打印,没有垃圾.但是,在我的 basic_string课堂上,当调用析构函数时,我会得到垃圾.怎么std::string办呢?我使用an allocatorconstructs,destroys,allocates和deallocates,但它仍然不起作用.

注意:我不是在寻找班级的解决方案,而是要了解std::string它是如何做到的.

AJG*_*G85 5

首先,除非在极少数特定情况下,否则不应显式调用析构函数,这不是其中之一.当字符串超出范围时,将根据标准自动调用析构函数.

第二,当你使用被破坏的物体时,除了垃圾之外还有什么期望呢?这是应该避免的未定义行为.如果要限制范围,则使用花括号,然后创建子范围,并调用对象析构函数以及要清理的对象.

int main(int argc, char **argv)
{
    { // new scope
      std::string s = "Hello World";
      std::cout << s;
    } // s destructor called for you

  // other stuff
}
Run Code Online (Sandbox Code Playgroud)