C++ 删除c+中的字符串对象+;

C++ 删除c+中的字符串对象+;,c++,string,C++,String,我有一个const char*str,我想把它转换成一个简单的字符串,所以我使用std::string()构造函数并将str的值复制到我的变量中 const char* str; std::string newStr = std::string(str); <some processing>... <end> const char*str; std::string newStr=std::string(str); ... 因此,在函数

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

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

    <some processing>...
    <end>
const char*str;
std::string newStr=std::string(str);
...

因此,在函数结束之前,我必须删除字符串newStr,否则std::string类的析构函数将被自动调用,并且此newStr将被删除。当我读到std::string类的析构函数不是虚拟的时,我感到困惑。但是它说字符串将在超出范围时被删除。如果析构函数不是虚拟的,为什么字符串变量在超出范围后会被删除呢

您不必删除
newStr
。它有,所以当它超出范围时,将调用它的析构函数。这与析构函数是虚拟的完全无关。

您不必删除
newStr
。它有,所以当它超出范围时,将调用它的析构函数。这与析构函数是虚拟的完全无关。

因为您没有使用new关键字创建对象,所以对象在堆栈上创建,析构函数在变量超出范围时自动调用。但是,当您使用new关键字创建对象时,对象是在堆上创建的。
这是C++中的一般规则。p> 由于没有使用new关键字创建对象,因此在堆栈上创建该对象,并在变量超出范围时自动调用析构函数。但是,当您使用new关键字创建对象时,对象是在堆上创建的。
这是C++中的一般规则。p> 您是否
new
it?如果没有,那么就不需要
delete
。您似乎对
delete
的作用以及析构函数(通常)应该是
虚拟的原因有一些误解。简单的规则是:每个
新的
只删除一个
,每个
新的[]
只删除一个
delete[]
。你没有一个
新的
,所以你不需要一个
删除
<代码>标准::字符串newStr(str)给定的代码存在问题,与OP的问题无关。由于
str
未初始化,
newStr
的值将未定义。您是否
新建了它?如果没有,那么就不需要
delete
。您似乎对
delete
的作用以及析构函数(通常)应该是
虚拟的原因有一些误解。简单的规则是:每个
新的
只删除一个
,每个
新的[]
只删除一个
delete[]
。你没有一个
新的
,所以你不需要一个
删除
<代码>标准::字符串newStr(str)给定的代码存在问题,与OP的问题无关。由于
str
未初始化,因此
newStr
的值将未定义。谢谢,我得到了它。因为我没有使用new创建对象,所以它是一个自动变量,在超出范围后会被销毁。谢谢,谢谢,我明白了。因为我没有使用new创建对象,所以它是一个自动变量,在超出范围后会被销毁。谢谢