我有一些混乱的指针删除和分配指针到类
I have some confusions on pointer deletion and assigning pointer into class
首先,我对指针删除有一些困惑。当我删除指针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 ?
}
-
您只能将已分配
new
的东西delete
。在您的情况下,您试图删除其他东西,所以您得到未定义的行为。 -
如果你想让你的
Foo
类"拥有"指针并负责删除它,那么你应该在类析构函数中delete name
。
虽然a是指针,但不能删除它。它指向堆栈(不是堆)上的内存块,它不能被删除。'delete'操作符用于在不再使用堆上用户分配的空间时释放它。一旦应用程序结束,所有分配的内存将被自动删除。
但是…假设你有一个在后台无限循环中运行的服务,并且你在堆上分配了一个空间而没有删除它->这个分配的内存很可能不会被删除(取决于操作系统和指针的类型- volatile与否)。开发人员有责任确保一旦他/她的对象不再使用(块结束或在析构函数中),所有分配的内存都被删除。
相关文章:
- 使用函数引用指向节点的指针删除链表中的节点?
- 如何通过指向元组的共享指针删除对象
- 函数内的 C++ 指针删除
- 一个对象的两个指针.删除了一个指针,对象仍然存在
- 如何通过存储在 std::list 中的指针删除对象?
- C++中的智能指针删除
- 将C 中的每个指针删除作为阵列的指针安全吗?
- 使用 C 字符串和指针.删除除小写和空格以外的任何字符
- 在特定情况下,指针删除和铸造之间的关系不清楚
- 提升属性树:使用指向节点及其父节点的指针删除节点
- 警告C4150在尝试包装本机C 类时,指向不完整类型的指针删除
- C++ Valgrind 双指针删除,用于防止内存泄漏
- C 通过指向其基类的指针删除派生对象
- 将指针删除到数组
- 当通过其中一个指针删除对象时,C++将所有指针设置为null
- 智能指针删除器和"using"名称为"pointer"关键字
- 通过指向其基的指针删除 POD 对象是否安全
- 模板化的出列无效指针:删除类时失败
- 使用"this"指针删除
- (C++) list.error 方法和使用指针删除内存