3

我已经执行了下面的代码,它工作得很好。因为它是关于指针的,我只是想确定一下。尽管我确定将 char* 分配给 string 会产生副本,即使我删除 char* , string var 也会保留该值。

#include <stdio.h>
#include <string.h>
#include <string>
#include <iostream>

int main(){
    std::string testStr = "whats up ...";
    int strlen = testStr.length();
    char* newCharP = new char[strlen+1];
    memset(newCharP,'\0',strlen+1);
    memcpy(newCharP,testStr.c_str(),strlen);

    std::cout << "  :11111111   :   " << newCharP << "\n";
    std::string newStr = newCharP ;

    std::cout << "  2222222 : " << newStr << "\n";
    delete[] newCharP;
    newCharP = NULL;

    std::cout << "  3333333 : " << newStr << "\n";
}

我只是在我的公司项目中更改了一些代码,并且 char* 在 C++ 中的函数之间传递。char* 指针已复制到字符串,但 char* 在函数末尾被删除。我找不到任何具体的原因。所以我只是删除 char* ,只要它被复制到一个字符串中。这会有什么问题吗..?

4

2 回答 2

2

从中创建 std::string 后删除 char 数组是否安全?

是的

于 2013-03-10T18:15:23.520 回答
2

当您将 C 风格的字符串(数组char)分配给std::string. 重载的赋值将该 C 风格的字符串复制到std::string.

std::string newStr = newCharP;

在此分配之后,所有字符都newCharP复制到newStr。然后就可以delete newCharP放心了。

于 2013-03-10T18:18:28.493 回答