我们能否确定数据点是否手动分配

Can we determine if the data pointed was allocated manually or not?

本文关键字:是否 分配 数据 我们      更新时间:2023-10-16

问题就是这样。在c++中,如果指针不是NULL,是否有办法确定该数据点是分配在堆上(new类型的分配)还是堆栈上(典型的分配和当前作用域生命周期)?

我有一个智能指针和数组的实现(我知道智能指针在c++ 11中存在,但我避免使用它们,直到有一种比目前更清晰的方式来添加智能数组),其中我跟踪引用计数等等。每当指针不再被引用时,它就被删除。问题是,目前的实现并不妨碍给类指针变量在堆栈上(我不想强迫的创建智能指针的指针,我有具体的情况我自己想做的分配,例如当创建数组函数和之前相同的功能需要调整传递给调用者等等),但如果我给这样一个指针,这个类将尝试调用deletedelete[]指针,这将导致未定义的行为(好吧,让我们诚实,在大多数情况下,崩溃)。

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

提前感谢大家。

No.

您所能期望的最好结果是基于某些特定库的实现细节的不可移植的破解,即使这样也会产生非零的假阳性结果。