0

我有一个 const char* str 并且我想将它转换为一个简单的字符串,所以我使用了 std::string() 构造函数并将 str 的值复制到我的变量中。

    const char* str;
    std::string newStr = std::string(str);

    <some processing>...
    <end>

所以在函数结束之前我必须删除字符串 newStr 还是自动调用 std::string 类的析构函数并且这个 newStr 将被删除。当我在这里读到std::string 类的析构函数不是虚拟的时,我感到很困惑。但是这里它说该字符串将在超出范围时被删除。任何人都可以对此有所了解,因为如果析构函数不是虚拟的,这似乎令人困惑,字符串变量在超出范围后如何被删除。

4

2 回答 2

4

您不必删除newStr. 它有自动存储,所以它的析构函数会在超出范围时被调用。这与析构函数是虚拟的完全无关。

于 2012-10-29T19:47:17.910 回答
0

由于您没有使用 new 关键字创建对象,因此该对象是在堆栈上创建的,并且当变量超出范围时会自动调用 destruct-or。但是,当您使用 new 关键字创建对象时,您的对象是在堆上创建的。这是 C++ 中的一般规则。

于 2012-10-29T19:50:37.023 回答