c++ - 在 Qt 的槽函数中修改参数是否安全?

标签 c++ qt signals-slots

我有一个发出 std::vector<uint8_t> 的信号其中包含大量数据(缓冲区)。

然后在接收对象中我有一个带参数的插槽 std::vector<uint8_t> data

然后我尝试解码这些数据。我必须做的一件事是删除填充,例如:

void receive_slot(std::vector<uint8_t> data)
{
    // Remove padding
    if (data.size() > 20)
        data.resize(data.size() - 20);
}

现在,我认为传入的这个参数是一个拷贝,我可以“随心所欲”。但是,重新调整大小大于 ~10 个字节会使我的程序崩溃。我假设调整大小小于 ~10 个字节不会仅靠运气使它崩溃。

因此,我假设我不能安全地执行此操作,应该先将其复制到新的数据缓冲区。

谁能告诉我这件事吗?

最佳答案

提供问题的直接答案:

Qt 中的槽只是普通的函数调用(调用它们的时间和参数是不同的,由 Qt 管理),并且修改函数参数是完全有效的(当显然是非 const 时)。当你说你得到了一份拷贝并且你可以“用它做你想做的事”时,你是对的。

在这种情况下,错误不仅仅来自于您正在修改函数参数这一事实。

关于c++ - 在 Qt 的槽函数中修改参数是否安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22509634/

相关文章:

python - 压缩 Bazel 生成的文件以进行部署

c++ - 在 C++ 缓冲输出中避免 memcpy

c++ - 模板代码中的默认类型参数错误

c++ - 流式运算符和多态基类列表

c++ - 如何从 QDir 和相对文件路径创建绝对文件路径?

qt - 如何在 QtQuick 中对齐 ListView 中的项目

c++ - 如何在 Qt 5 中将 New-Signal-Slot 语法声明为函数的参数

javascript - 如何在纯 QML+JS 中创建圆形进度条?

Qt 信号继承?

c++ - QT4没有这样的slot错误