我怎么知道是否使用new在堆上分配了一个对象?

smi*_*mit 1 c++ heap stack

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

我有一个功能:

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函数,最好的选择是可能有DoSomeThingSomeObject的值(或常量引用); 那么你根本不需要处理指针.