簡體   English   中英

如何在c ++中刪除char *?

[英]How to delete char * in c++?

在我的應用程序中,我創建了一個像這樣的char*

class sample
{
    public:
        char *thread;
};

sample::sample()
{
    thread = new char[10];
}

sample::~sample()
{
    delete []thread;
}

我在代碼中做了正確的事嗎?

如果您在new之后有[] ,則在delete后需要[] 您的代碼看起來正確。

需要注意的要點清單:

1)您需要為n個字符分配空間,其中n是字符串中的字符數,以及尾隨空字節的空間。

2)然后,您將線程更改為指向其他字符串。 因此,您必須對使用new[]創建的變量使用delete[]函數。

但是你為什么要使用newdelete字符數據呢? 為什么不使用std::string而不是'C'函數? 令人驚訝的是,為什么這么多人不做最簡單的事情:

#include <cstdio>
#include <string>

int countWords(const char *p);

int main(int argc, char *argv[])
{
    std::string pString = "The Quick Brown Fox!";

    int numWords1 = countWords(pString.c_str());
    printf("\n\n%d words are in the string %s", numWords1, pString.c_str());

    int numWords2 = countWords(argv[1]);
    printf("\n%d words are in the string %s", numWords2, argv[1]);
}

不需要new[]delete[]strcpy()等。

使用strlen() 更好的是,不要使用char*並使用std::string作為字符串數據。

這是“正確的”*,但這是非常錯誤的。

你不應該使用new[] ,而是使用std::vector<char>std::string 即使你沒有這樣做,你也需要尊重三級規則 ,否則你的班級就會被打破。

*假設你的意思是new char[10] 另外,更正統的是delete[] thread

雖然它與內存管理無關,但還有另外一點需要牢記。 如果你要定義sample::samplesample::~sample ,首先必須聲明它們,所以你的類定義應該如下所示:

class sample
{
    public:
        char *thread;
        sample();
        ~sample();
};

正如@GMan所說,你根本不應該這樣做......

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM