c++ - 我们可以确定指向的数据是否是手动分配的吗?

标签 c++ pointers c++11

<分区>

问题差不多就是这样。在 C++ 中,如果指针不是 NULL,是否有任何方法可以确定指向的数据是分配在堆上(new 类型分配)还是堆栈(典型分配和当前作用域生命周期)。

我有一个智能指针和数组的实现(我知道 C++11 中存在智能指针,但我避免使用它们,直到有比当前更干净的添加智能数组的方法),我在其中跟踪引用计数等.每当一个指针不再被引用时,它就会被删除。问题是,当前的实现并没有阻止给类一个指向堆栈上变量的指针(我不想通过智能指针强制创建指针,我有特定的情况我想做自己分配,例如在一个函数中创建一个数组时,在同一个函数中它需要在传递给调用者之前调整大小等等),但是如果我给出这样的指针,类将尝试调用 delete 或此指针上的 delete[],这将导致未定义的行为(老实说,在大多数情况下会导致崩溃)。

那么有没有一种方法可以检查我是否应该在销毁时删除这个指针,或者类是否应该首先接受它?

提前谢谢大家。

最佳答案

没有。

您最好的期望是基于某些特定库的实现细节的不可移植的 hack,即使那样也会产生非零的误报结果。

关于c++ - 我们可以确定指向的数据是否是手动分配的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25017137/

相关文章:

c++ - OpenGL相机运动程序顶点着色器问题

c++ - C++中的动态树

c++ - 请求非标量类型

c - 定义指向内存地址的指针并打印内容 C++

python - 虚拟继承 C++ 和 boost python

c++ - 字符 'apex' C++

c++ - Lua、C++,有没有比 lua_open() 更深入的介绍?

c++ - C++11 中的生产者-消费者

c++ - 应用程序的一个实例,平台无关,C++11

c++ - 检查从enable_shared_from_this派生的对象是否由shared_ptr管理?