我想知道是否有任何标准库函数或其他技巧,我可以通过该技巧查询应用程序是否分配了指针.其实我想做以下事情....
我有一个功能:
void DoSomeThing(SomeObject* pObj);
Run Code Online (Sandbox Code Playgroud)
现在调用这个函数我们通常有两个选择如下:
//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));
Run Code Online (Sandbox Code Playgroud)
但第三种方法的问题在于 - 内存的重新分配现在是被调用方法的责任,在这里我卡住了,因为我不确定对象是否由应用程序分配.
我在这里发布了这个问题,甚至没有用谷歌搜索它,因为我对它很好奇,如果我得到一个干净的解决方案,对我来说是一个很好的奖励......很抱歉.
如果无法确定某个对象是否在堆上,那么大师会如何建议我实现我想要的?
Jam*_*lis 11
没有可移植的方法来确定指针是否引用具有动态分配的对象,否.
它"省了我一些打字"是一个非常糟糕的理由选择一个解决问题而不是另一个问题.在您提出的三个选项中,第一个显然是最好的,因为它依赖于自动生命周期管理.
这就是说,如果你真的创建了一个对象只是传递给DoSomeThing函数,最好的选择是可能有DoSomeThing取SomeObject的值(或常量引用); 那么你根本不需要处理指针.