我对指针删除有一些困惑,并将指针分配到类中

时间:2015-08-06 23:08:50

标签: c++ pointers

首先,我对指针删除有些困惑。当我删除指针a时,我不明白为什么int x也被删除..因为我已经指定了a = f(指向y的指针)

      int  x = 5;
      int  y = 3;

      int *a = &x;
      int *f = &y;

      a = f;

      delete a;

      cout << x; // Segmentation fault (core dumped)

其次,如果我想用带有char *指针的类赋值。我该怎么办?

    class Foo{
    public:
    char * name;

    void setName(char * const newName){
           name = newName;
     }

    };



   void getInput()
   {
      char temp[5];
      Foo s;
      char * x = new char[5]; // four words
      cin >> temp;
      strcpy(x,temp);
      s.setName(x); // should i delete x pointer
                   // afterward because this function
                   // is going to terminated ?

   } 

2 个答案:

答案 0 :(得分:3)

  1. 您只能delete已使用new分配的内容。在您的情况下,您试图删除其他内容,因此您会得到未定义的行为。

  2. 如果您希望Foo课程获得所有权&#34;指针并负责删除它,那么你应该在类析构函数中delete name

答案 1 :(得分:0)

虽然a是指针,但您无法将其删除。它指向堆栈上的内存块(不是堆),它不能被删除。 'delete'运算符用于在您不再使用堆时释放堆上的用户分配空间。一旦您的应用程序自动结束,所有已分配的内存将被删除。

但是......假设你有一个在无限循环中在后台运行的服务,你在堆上分配一个空格而不删除它 - &gt;这个分配的内存很可能不会被删除(取决于操作系统和指针类型 - 易失性)。开发人员有责任确保在他/她的对象不再使用(块结束或析构函数)后删除所有已分配的内存。