Mar*_*ark 6 c++ gcc boost memory-management
我来自C#背景到C++.假设我有一个方法在堆栈的方法中创建一个对象,然后我将它传递给另一个类方法,该方法将它添加到一个memeber向量.
void DoStuff()
{
SimpleObj so = SimpleObj("Data", 4);
memobj.Add(so);
}
//In memobj
void Add(SimpleObj& so)
{
memVec.push_back(so); //boost::ptr_vector object
}
Run Code Online (Sandbox Code Playgroud)
这是我的问题:
我意识到这些对C++程序员来说可能是显而易见的.
标记
实现您要做的事情的最简单方法是将对象的副本存储在普通的STL容器中(例如std::vector
).如果这些对象重量级且复制成本很高,您可能希望在堆上分配它们将它们存储在具有足够智能指针的容器中,例如boost::shared_ptr
(参见@ Space_C0wb0y的答案中的示例).
另一种可能性是与... boost::ptr_vector
结合使用boost::ptr_vector_owner
; 最后一个类负责"拥有"存储在关联中的对象ptr_vector
,并在超出范围时删除所有指针.有关详细信息ptr_vector
,并ptr_vector_owner
,你可能想看看这篇文章.
归档时间: |
|
查看次数: |
1100 次 |
最近记录: |