[英]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[]
函數。
但是你為什么要使用new
和delete
字符數據呢? 為什么不使用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::sample
和sample::~sample
,首先必須聲明它們,所以你的類定義應該如下所示:
class sample
{
public:
char *thread;
sample();
~sample();
};
正如@GMan所說,你根本不應該這樣做......
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.