gpt4 book ai didi

C++/C 对象->isOnStack()

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:50:36 29 4
gpt4 key购买 nike

出于多种原因,我希望能够在运行时确定指针是否在堆栈上。就像我将它传递给函数调用一样,我可以确定是否需要克隆它。或者我是否需要删除它。

在 Microsft C (VC 6,7,8) 中是否有一种方法可以对指针进行边界检查以查看它是否在堆栈中?我只关心在拥有放置对象的堆栈的线程上确定这一点。

有点像

静态常量 int __stack_size和 __stack_top

????谢谢!

最佳答案

知道一个对象是在栈上还是堆上并不能告诉您它是否应该被调用的函数克隆或删除。毕竟,您可以克隆任何一种类型,虽然您不应该尝试删除堆栈分配的函数,但您也不应该尝试删除所有堆指针。

有一个函数会进行一些神秘的检查,看看它是否应该删除一个传递的指针,这将导致困惑。您不希望出现这样一种情况,即您可能会或可能不会引用您传递的对象中的字段,具体取决于上下文。您也不想冒可能导致尝试释放堆栈对象的错误风险。

没有任何标准方法可以判断指针指向什么,任何非标准方法都可能会出错。您不能指望堆栈连续性,尤其是在多线程应用程序中(并且有人可以轻松地将线程添加到应用程序而没有意识到后果)。

唯一安全的方法是有一个调用约定,即被调用函数将或不会删除传递的对象,或者传递某种智能指针。别的什么都是自找麻烦。

关于C++/C 对象->isOnStack(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/939567/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com