相关疑难解决方法(0)

指针是否保证在C++中的`delete`后保留其值?

灵感来自这个问题.

假设在C++代码中我有一个有效的指针并且正确delete.根据C++标准,指针将变为无效(3.7.3.2/4 - 解除分配函数将使所有指针无效,指向解除分配的存储的所有部分).

至少在大多数实现中,它保留了值并将存储与以前完全相同的地址delete,但是使用该值是未定义的行为.

标准是否保证指针将保留其值或允许更改的值?

c++ pointers delete-operator

16
推荐指数
2
解决办法
3198
查看次数

删除后在c ++中的指针

在阅读了很多关于此的帖子后,我想澄清下一点:

A* a = new A();
A* b = a;

delete a;

A* c = a; //illegal - I know it (in c++ 11)
A* d = b; //I suppose it's legal, is it true?
Run Code Online (Sandbox Code Playgroud)

所以问题是关于使用已删除指针的副本.

我读过,在c ++ 11中读取a导致未定义行为的价值 - 但是读取它的价值b呢?

尝试读取指针的值(注意:这与解除引用它不同)会导致自C++ 14以来的实现定义行为,其中可能包括生成运行时错误.(在C++ 11中它是未定义的行为) 删除后指针本身会发生什么?

c++ pointers c++11 c++14

12
推荐指数
2
解决办法
1484
查看次数

标签 统计

c++ ×2

pointers ×2

c++11 ×1

c++14 ×1

delete-operator ×1