我读到 QT 在信号/槽机制上应用签名规范化过程。MOC 生成器基本上从信号/插槽中删除了 const 引用限定符,然后按值传递它们。
我有一个类经常生成一个名为 BIG_DATA 的大数据结构,而其他一些类需要在每次发出该数据结构时捕获它。
struct BIG_DATA
{
// very big data
};
class DataGenerator
{
// some methods which generate BIG_DATA
signals:
void data_updated(const BIG_DATA &);
};
我所做的 :
connect(&data_generator_object, SIGNAL(data_updated(const BIG_DATA &)), this, SLOT(catch_new_data(const BIG_DATA &)));
QT 做什么:
connect(&data_generator_object, SIGNAL(data_updated(BIG_DATA)), this, SLOT(catch_new_data(BIG_DATA)));
那么,在这里删除 const 引用限定符有什么好处呢?我将如何处理将整个 BIG_DATA 复制到 data_updated 信号的许多客户端的开销?
似乎最好的方法是使用指向生成的 BIG_DATA 对象的指针,如果 QT 也没有尝试删除指针签名。