我有一个发出 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/