C ++删除类成员字符*

时间:2013-09-26 17:44:54

标签: c++ char delete-operator

我有一个名为myString的简单类,它将char*作为私有成员。不管我做什么,我似乎无法删除它。

class myString
{
public:
  myString():letters( "This is a string" ){}
  ~myString()
  {
    delete []letters;
  }
private:
  char* letters;
}

我已尝试过delete lettersdelete[] letters等,但我总是收到错误消息。我曾经调试过,字母总是初始化为字符串/指向字符串,调试器总是在删除行崩溃。

4 个答案:

答案 0 :(得分:3)

letters指向字符串文字,也就是说myString的每个实例都指向加载的程序可执行文件中的相同数据。

您无法删除字符串文字,也不需要。

答案 1 :(得分:3)

请注意:

  • 永远不会自动分配指针。
  • “Hello Word”的类型为const char [11](转换为const char *而不是char *)
  • 将char char *分配给char *是不行的。
  • 如果指针在之前从new / new []获得它的值,则只能删除/删除[]指针。

答案 2 :(得分:2)

首先分配内存然后尝试删除,你试图删除一个字符串文字。

class myString
{
public:
  myString() {letters= new char [25]; /* Copying code */}
  ~myString()
  {
    delete []letters;
  }
private:
  char* letters;
}

答案 3 :(得分:0)

您似乎希望拥有该字符串的副本,也许您以后可以对其进行修改。 C ++不会为你创建字符串缓冲区,你必须自己做。

myString()
{
    letters = new char[MAX_STRING_LEN];
    strcpy(letters, "This is a string");
}

当然最好使用std::string而不是动态分配的字符缓冲区,但我会假设你有理由。