c++ - 我如何知道一个对象是否使用 new 在堆上分配?

标签 c++ heap-memory stack-memory

我想知道是否有任何标准库函数或其他技巧可以用来查询应用程序是否分配了指针。其实我想做以下....

假设我有一个函数:

void DoSomeThing(SomeObject* pObj);

现在调用这个函数一般有以下两种选择:

//The first method using stack

SomeObject ObjLocal(Arg1,Arg2);
DoSomething(&ObjLocal);

//The second method using heap

SomeObject* ObjUserAllocated=new SomeObj(Arg1,Arg2);
DoSomeThing(ObjUserAllocated);

//But I like to use code like below (saves me some typing)

DoSomeThing(new SomeObject(Arg1,Arg2));

但是第三种方法的问题是 - 内存的释放现在是被调用方法的责任,我坚持在这里,因为我不确定对象是否由应用程序分配。

我什至没有用谷歌搜索就把这个问题贴在这里了,因为我对此很好奇,如果我得到一个干净的解决方案,这对我来说将是一个巨大的返回......对此深表歉意。

如果无法确定一个对象是否在堆上,那么各位大师会如何建议我实现我想要的?

最佳答案

没有可移植的方法来确定指针是否引用具有动态分配的对象,不。

它“节省了我一些打字时间”是选择一种解决问题而不是另一种解决方案的非常糟糕的理由。在您提供的三个选项中,第一个显然是最好的,因为它依赖于自动生命周期管理。

也就是说,如果您真的要创建一个对象只是为了传递给 DoSomeThing 函数,最好的选择可能是让 DoSomeThing 接受 SomeObject 按值(或按常量引用);那么你根本不必处理指针。

关于c++ - 我如何知道一个对象是否使用 new 在堆上分配?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8692022/

相关文章:

c - C 中的激活记录是在堆栈还是堆上创建的?

java - 如果我将最大堆大小设置为 2 GB,堆转储大小是多少?

c - 这是内存泄漏,因为内存是在堆栈上分配的吗?

c - 局部变量分配在哪里?堆还是栈?

c# - 在堆栈上分配对象的好处?

c++ - 使用 Eigen3 实现 C++ 的最大精度

javascript - 如何将字符串值从 C++ 返回到 javascript (windows/Visual studio 2008)?

c++ - 未存储返回值时,std::async 不会产生新线程

c - C中的一种自修改程序

c++ - 如何使 MS-Visual C++ 应用程序最大化?