首先,我对指针删除有些困惑。当我删除指针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 ?
}
答案 0 :(得分:3)
您只能delete
已使用new
分配的内容。在您的情况下,您试图删除其他内容,因此您会得到未定义的行为。
如果您希望Foo
课程获得所有权&#34;指针并负责删除它,那么你应该在类析构函数中delete name
。
答案 1 :(得分:0)
虽然a是指针,但您无法将其删除。它指向堆栈上的内存块(不是堆),它不能被删除。 'delete'运算符用于在您不再使用堆时释放堆上的用户分配空间。一旦您的应用程序自动结束,所有已分配的内存将被删除。
但是......假设你有一个在无限循环中在后台运行的服务,你在堆上分配一个空格而不删除它 - &gt;这个分配的内存很可能不会被删除(取决于操作系统和指针类型 - 易失性)。开发人员有责任确保在他/她的对象不再使用(块结束或析构函数)后删除所有已分配的内存。