如何通过单条语句获取指向默认struct结构体对象的指针
单条语句实现的几种可选方案
你可以根据你的使用场景选择对应实现:
堆内存分配场景(推荐C++11及以上用智能指针)
如果不需要保留原对象变量,只需要指针,优先选择智能指针自动管理内存,避免泄漏:// C++14及以上可用std::make_unique auto pointerToDefaultStructObject = std::make_unique<SomeStruct>(); // C++11及以上可用std::make_shared auto pointerToDefaultStructObject = std::make_shared<SomeStruct>();如果你需要手动管理内存,也可以直接用
new:auto pointerToDefaultStructObject = new SomeStruct{}; // 后续使用完毕需手动调用 delete pointerToDefaultStructObject 释放栈内存场景,同时需要保留对象和指针
C++17及以上版本可以用结构化绑定一次性定义两个变量:auto [defaultStructObject, pointerToDefaultStructObject] = []{ SomeStruct obj{}; return std::make_tuple(obj, &obj); }();这种方式得到的对象和指针生命周期与当前作用域一致,无内存泄漏风险,也不会出现临时对象悬垂问题。
短生命周期临时使用场景
如果你只需要在当前语句内使用指针,不需要后续访问,可以直接对临时对象取地址:auto pointerToDefaultStructObject = &(SomeStruct{});注意:该方案得到的指针指向的临时对象会在当前语句结束后销毁,后续访问会触发未定义行为,非必要不推荐使用。
内容的提问来源于stack exchange,提问作者Manojkumar Khotele
相关产品推荐
相关产品推荐

