C++中能否用一行代码创建栈分配的类实例及指向它的指针?
C++栈分配能否一行拿到类实例指针?
直接说结论:没有安全的一行语法能同时完成「创建栈上类实例 + 获取它的有效指针」。
你现在写的两行代码是标准且安全的操作:
#include <iostream> class Base {}; int main() { Base base; Base* ptr = &base; // 栈对象的指针,生命周期和base一致,安全 return 0; }
网上能搜到的所谓「一行写法」基本都是坑,比如:
auto* ptr = &Base{};
这里的Base{}是临时栈对象,它的生命周期只在这一行表达式里,语句结束后对象就被销毁了,ptr直接变成悬空指针,后续用它会触发各种不可预测的错误,绝对不能用。
另外给从Python转来的你提个醒:C的栈对象是自动销毁的(离开所在的大括号就没了),堆对象(new出来的)才需要手动释放。之所以没设计栈实例+指针的一行语法,就是为了防止开发者误碰悬空指针的坑,毕竟C没有Python那种自动垃圾回收机制,内存全靠自己管。
内容的提问来源于stack exchange,提问作者Nick
相关产品推荐
相关产品推荐

