如何处理大型指针结构
How to handle large pointer structures
我编写了一个应用程序,通过外部服务将数据推送到某个服务器。我必须使用一个定义的结构,它看起来像这样:
class A {
B *b; // Another class built the same principle
C *c; // And another one
...
};
它在某个地方可以归结为
class XY {
double *some_val;
std::string *another_val;
...
};
我面临的问题是,如果你愿意的话,我只会处理一个又一个的指针,而我还没有弄清楚处理这些结构的最佳方式是什么。
我可以用new
和delete
自己处理内存管理,但之后我必须进行大规模的清理,在我看来,我忘记清理某些东西和程序泄漏的可能性太高了。
我可以在本地声明类并以这种方式填充它们,但我必须事先声明每个变量,所以我必须在做任何事情之前分析类的层次结构,之后它仍然会变得非常混乱。
智能指针也出现在我的脑海中,但由于它们基本上是一个包装指针的类,我也必须事先声明它们,与以前的方法相比,优势似乎很小。
有人知道一种智能的、最重要的是可读/可维护的方法来处理这些巨大的指针结构吗
更新:
如果有人遇到同样的问题,这就是我现在的方法(尽管我仍然认为这很混乱!):
#include <boost/shared_ptr.hpp>
#include <boost/any.hpp>
class A {
B *b_;
double *d_;
};
int main() {
std::vector<boost::any> vp;
// Create instance of A
vp.push_back(boost::shared_ptr<A>(new A));
A *a = boost::any_cast<boost::shared_ptr<A> >(vp.back()).get();
// Create instance of B in A
vp.push_back(boost::shared_ptr<B>(new B));
a->b_ = boost::any_cast<boost::shared_ptr<B> >(vp.back()).get();
// etc.
return 0;
}
更新2:
#include <boost/shared_ptr.hpp>
typedef std::vector<boost::shared_ptr<void> > MemoryManager;
template <class T> T* create_managed(T *ptr, MemoryManager &memorymanager) {
memorymanager.push_back(boost::shared_ptr<T>(ptr));
return boost::static_pointer_cast<T>(memorymanager.back()).get();
}
int main() {
MemoryManager mm;
A *a = create_managed(new A, mm);
a->b_ = create_managed(new B, mm);
return 0;
}
考虑使用智能指针,它们有一个很大的优势:
为了比常规指针更聪明,智能指针需要做常规指针没有做的事情。这些东西可能是什么?C++(和C)中最常见的错误可能与指针和内存管理有关:悬空指针、内存泄漏、分配失败和其他乐趣。有一个智能指针可以处理这些事情,可以节省很多阿司匹林。。。
您需要智能指针。它们有很多实现,或者你可以自己编写。以适当的方式使用它们,您不必关心删除类。
相关文章:
- 1d 智能指针不适用于语法 (*)++
- 删除一个线程上有数百万个字符串的大型哈希映射会影响另一个线程的性能
- 在C#中处理C++指针而不使用unsafe的最佳方法
- 为什么使用 "this" 指针调用派生成员函数?
- 函数向量_指针有不同的原型,我可以构建一个吗
- 使用指针从C++中的数组中获取最大值
- C++中高效的大型稀疏块压缩线性方程
- 助记符和指向成员语法的指针
- 嵌入方指针压缩已禁用
- 数组的指针从不分段故障
- C++ 指针的内存地址和指向数组的内存地址如何相同?
- 构造函数中的异常:init() 方法、指针、大型 try/catch 或
- 封装与大型C 对象中的指针返回
- 我们是否应该将指向类实例的智能指针存储在大型 std::vector 中以获得更好的性能?
- 如何实现大型非指针成员的移动构造函数
- C++:使用指针存储/访问大型对象以避免内存不足
- 使用固定指针将大型数据结构传递给非托管代码
- 单线程共享指针,可简单地包含在大型项目中
- 如何处理大型指针结构
- 移动大型非指针基对象的语义