我有一些混乱的指针删除和分配指针到类

I have some confusions on pointer deletion and assigning pointer into class

本文关键字:指针 删除 分配 混乱      更新时间:2023-10-16

首先,我对指针删除有一些困惑。当我删除指针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 ?
   } 
  1. 您只能将已分配new的东西delete。在您的情况下,您试图删除其他东西,所以您得到未定义的行为。

  2. 如果你想让你的Foo类"拥有"指针并负责删除它,那么你应该在类析构函数中delete name

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

但是…假设你有一个在后台无限循环中运行的服务,并且你在堆上分配了一个空间而没有删除它->这个分配的内存很可能不会被删除(取决于操作系统和指针的类型- volatile与否)。开发人员有责任确保一旦他/她的对象不再使用(块结束或在析构函数中),所有分配的内存都被删除。