You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否在构造函数的function-try处理程序中访问this指针?

构造函数函数try块中this指针的访问问题

先看你的代码示例:

class C {
    C() try {
        void* addr = this;
        add_addr_to_static_structure(addr);
        // May throw exception
    } catch(...) {
        void* addr = this; // <- Can I access this ?
        remove_addr_from_static_structure(addr);
    }
};

结论

你可以安全地将this作为单纯的指针值使用(不解引用的前提下),不会触发未定义行为。

详细解释

  • 构造函数的函数try块触发catch时,对象的非静态成员和基类子对象确实已经被销毁,这也是标准禁止在此场景下访问成员/基类的原因——这类操作属于解引用this的行为,会导致未定义行为。
  • 但this指针本身的地址值是有效的:它指向的是原本为该对象分配的内存地址,即使构造失败,这个地址的标识作用依然存在。你之前用这个地址注册到静态结构中,现在用同一个地址值来注销,逻辑上完全成立,且符合标准规定。
  • 简单来说:只要你不通过this去访问对象的成员、调用非静态成员函数,仅仅把this转成void*(或其他指针类型)传递、作为标识值使用,就是合法的操作。

内容的提问来源于stack exchange,提问作者mgautierfr

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 06:02:39