【发布时间】:2019-07-10 13:42:27
【问题描述】:
我有一个函数,它使用存储在结构 A 中的信息。这个函数经常被调用,而且大多数时候它只能依赖存储在 A 中的信息。 在某些(罕见的)条件下,不能使用 A 的对象之一。必须创建一个新对象,并且它的寿命不应超过该函数(因为它只能使用一次并使用大量存储空间)。 我有一些伪代码来演示我的问题。目前我真的不喜欢它,因为对“new”的调用,但我想不出另一种方法来使用智能指针来实现这一点。
正如我在每本书中读到的那样,您现在不应该直接使用指针并依赖智能指针,我不确定,能否正确实现我想要的。
struct A{
myData data;
}
void often_called_function(int i, A &structA)
{
// Pointer which shall dynamically point to existing or newly created object
myData *current_data;
// we rarely land here, data can't be used
if (i == 10) {
current_data = new myData(special arguments);
current_data->reinit(i);
}
// most of the time we land here, no need to re-create data, just reinit existing data from struct A
else {
structA.data.reinit(i);
current_data = &structA.data;
}
// do more stuff with current_data
current_data->do_something();
}
所以基本上我正在寻找一种“更好”且安全的方法来完成此任务,有人可以帮助我吗? 提前致谢
【问题讨论】:
-
使用
shared_ptr怎么样? -
不会共享指针,如果我在 else 中分配“&structA.data”给它,当它超出范围时尝试销毁 structA.data(所以在函数结束后)?
标签: c++ pointers smart-pointers