我想知道是否有任何标准库函数或其他技巧可以用来查询应用程序是否分配了指针。其实我想做以下....
假设我有一个函数:
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/