【发布时间】:2014-07-30 08:43:18
【问题描述】:
给定一个简单的类 有一个私有成员,例如 a
double *data_series
这个成员被分配并填充了来自 qt 槽的数据,如下所示:
int channel_count = ...
data = new double[channel_count];
std::copy(input_data, input_data+channel_count, data);
在这个类的dtor中,数据ptr被删除了。
现在,这个简单的类包含检索到的小数据样本,并且这些类/帧中的每一个都被发出,然后应该由所有连接的插槽以一种好的方式处理,请注意数据 ptr 指向的数据是从未修改,只是阅读。
我不太擅长智能指针,所以首先我只连接了一个插槽,所以这不是一个大问题,我可以发出指向类的指针并在完成后删除插槽中的类。当连接多个插槽时会出现问题,只有在所有插槽都用完数据后才能删除数据指针。我不能按值发出类,因为我不想有一个一直复制数据的复制 ctor。
那么,我应该向类发出某种智能指针吗?或者我应该以某种方式使用智能指针来管理数据指针。我在这里寻找一个好的模式供我遵循。
brgds
【问题讨论】:
-
您是否尝试过使用
QSharedPointer?内存在 QSharedPointer 的最后一次引用被删除时被释放/删除。 -
我尝试将指向类的指针作为 QSharedPointer 发出,它似乎运行良好。但是我很难找到一个好的模式,我想知道我是否应该将数据指针声明为共享指针,然后只发出类的实例......然后默认的复制运算符会自动复制 QSharedPointer 和我猜的所有其他参数...当最后一个实例被删除时,它应该删除共享指针指向的数据...
-
Qt 容器的复制构造函数不会复制数据。
标签: c++ qt smart-pointers