我们能否确定数据点是否手动分配
Can we determine if the data pointed was allocated manually or not?
问题就是这样。在c++中,如果指针不是NULL
,是否有办法确定该数据点是分配在堆上(new
类型的分配)还是堆栈上(典型的分配和当前作用域生命周期)?
我有一个智能指针和数组的实现(我知道智能指针在c++ 11中存在,但我避免使用它们,直到有一种比目前更清晰的方式来添加智能数组),其中我跟踪引用计数等等。每当指针不再被引用时,它就被删除。问题是,目前的实现并不妨碍给类指针变量在堆栈上(我不想强迫的创建智能指针的指针,我有具体的情况我自己想做的分配,例如当创建数组函数和之前相同的功能需要调整传递给调用者等等),但如果我给这样一个指针,这个类将尝试调用delete
或delete[]
指针,这将导致未定义的行为(好吧,让我们诚实,在大多数情况下,崩溃)。
那么有没有一种方法可以检查我是否应该在销毁时删除这个指针,或者类是否应该首先接受它呢?
提前感谢大家。
No.
您所能期望的最好结果是基于某些特定库的实现细节的不可移植的破解,即使这样也会产生非零的假阳性结果。
相关文章:
- 我在二维向量中是否正确分配了内存
- 当一个新对象被分配到它的地址时,对象是否必须被销毁
- 在函数范围内在堆栈上分配的数组在离开函数时是否总是被释放?
- 是否可以使用其他变量为变量分配值,而无需在 C++ 中更改其值?
- 堆分配的对象是否存在永不为空的唯一所有者?
- 新分配指向函数的指针是否合法?
- 在对象指针上调用 Delete 是否会递归删除其动态分配的成员
- 是否可以使用分配器对象来释放另一个分配器分配的内存?
- 释放动态分配的内存时是否需要执行此额外步骤
- std::initializer_list 堆是否分配内存?
- 迭代器是否分配内存(如指针)?
- C 检查值是否分配给了类的成员
- 内存管理 - 添加小部件是否分配父级
- 一般来说,如何找出客户端是否分配了静态Ip或是dhcp客户端
- 未使用的 STL 容器是否分配内存
- 移动是否分配了 std::fstream 关闭原始流
- 我如何知道是否分配了内存插槽
- 要声明指针变量,内存是否分配给指针的名称或指针的地址?
- 宏是否分配内存?
- 是否有一种方法来判断是否分配了内存缓冲区并且必须删除