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";
}

会社のプロジェクトでいくつかのコードを変更しているだけで、C++ の関数間で char* が渡されます。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 に答える