在联合中共享ptr
Shared ptr in union
我想访问共享ptr,它是在联合中,虽然发生分段错误:
struct union_tmp
{
union_tmp()
{}
~union_tmp()
{}
union
{
int a;
std::shared_ptr<std::vector<int>> ptr;
};
};
int main()
{
union_tmp b;
std::shared_ptr<std::vector<int>> tmp(new std::vector<int>);
b.ptr = tmp; //here segmentation fault happens
return 0;
}
错误的原因是什么,我如何避免它?
需要初始化联合内的std::shared_ptr
:
union_tmp()
: ptr{} // <--
{}
否则,ptr
保持未初始化状态,调用其赋值操作符会触发未定义行为。
我会使用std::variant
安全c++ "union "(或boost::variant
,如果std::variant
不适合你)。
。你可以试试:
std::variant<int, std::shared_ptr<std::vector<int>>> v;
v = std::make_shared<std::vector<int>>();
相关文章:
- 为共享 ptr 向量实现复制 c'tor?
- C++:在不中断共享的情况下通过引用传递共享 PTR?
- 如何控制共享 ptr 引用计数?
- 这是MSVC 2013中具有共享PTR的单例的正确实现吗?
- 如何从原始 ptr 递增共享 ptr 的计数
- 唯一/共享 ptr 用于在数组超出范围后自动删除阵列
- C 在多个引用上共享PTR发布
- 共享PTR地图与LLDB漂亮的打印机
- 使针对特定托管对象的所有共享 ptr 失效
- c++在没有虚拟析构函数的多态性中共享ptr
- 我如何在void*和boost共享ptr之间切换
- gcc共享ptr副本分配实现
- C++11共享Ptr,共享相同的参考计数器
- 为什么这个显式析构函数会导致共享ptr中的内存损坏
- 在联合中共享ptr
- 从数组的共享ptr访问共享ptr
- 添加对共享ptr的引用会增加引用计数吗?
- 插入无序映射将共享ptr变为null
- 共享 PTR - C++:std::shared_ptr<T> 和 std::shared_ptr<T const> 有什么区别?
- 共享 PTR - shared_ptr 和 unique_ptr Lippman C++入门中的构造函数