2013-03-08 107 views
3

我已經執行了下面的代碼,它完美地工作。因爲它是關於指針,我只是想確定。雖然我確信將char *賦值給字符串會產生副本,即使我刪除了char *,字符串var也會保留值。將它分配給字符串變量後刪除Char *

#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 *,只要它被複制到一個字符串中。這會造成任何問題..?

+0

這不是一個真正的代碼審查問題,說實話。我會說這個問題最好放在StackOverflow.com上。 – 2013-03-08 22:08:48

+0

@OJ。你可以移動這個問題到stackoverflow嗎? 。我想因爲這是一個代碼檢查,我可以在這裏發佈。 – 2013-03-09 20:59:00

+0

@ManikandarajS我同意OJ。你把它當作代碼審查請求來表示,但這裏仍然有一個非常具體的問題(即:「是否在創建一個'std :: string'後才刪除一個char數組?」),並且你發佈的用於審查的代碼是僅僅是一個例子來說明這個問題。所以在我看來,這個問題將非常適合Stack Overflow。我現在正在移動它。 – sepp2k 2013-03-10 18:08:46

回答

2

當您將C風格的字符串(的char陣列)的std::string。重載的任務將該C風格的字符串複製到std::string

std::string newStr = newCharP; 

這個任務後,到newStrnewCharP副本中的所有字符。那麼你可以安全地使用deletenewCharP

+0

4個小時前他問了這個問題 - 並得到了答案。 – 2013-03-10 18:21:23

+1

@Aniket:這個答案也告訴你*爲什麼*它的作品。 – 2013-03-10 18:24:58

2

從它創建一個std :: string安全後刪除一個char數組?

相關問題