我想使用一个函数来分配和初始化两个相关的struct实例。但是我无法在分配函数之外保留内存。另外,如果可能的话,我宁愿这样做也不会发生内存泄漏:
void alloc_init(foo_struct *bar, foo_struct *baz){
//Create some values in here
bar = new foo_struct(created_val1, created_val2);
baz = new foo_struct(created_val3, created_val4);
}
如果我从created_val1
中检查bar
中alloc_init()
的值,那就完全没问了......但是一旦alloc_init
从堆栈中弹出,我就会得到垃圾。如何使这些价值观持续存在?
答案 0 :(得分:3)
您需要通过引用传递指针:
void alloc_init(foo_struct *& bar, foo_struct *& baz){
//Create some values in here
bar = new foo_struct(created_val1, created_val2);
baz = new foo_struct(created_val3, created_val4);
}
因为您按值传递指针,所以您正在为函数内的原始指针的副本分配内存。
答案 1 :(得分:0)
你可以制作static
,这不是最好的解决方案。或者,您可以在更高的范围内声明全局变量,例如在更持久的类或全局变量中。