QString 与 QTextStream 的所有权
Ownership of QString with QTextStream
我正在尝试使用QTextStream
从QString
读取。由于构造函数具有以下签名:
QTextStream(QString *string, QIODevice::OpenMode openMode = QIODevice::ReadWrite)
(请参阅文档)
由于构造函数传递了一个原始指针,我想知道QTextStream
是否拥有QString
的所有权,或者我是否必须在代码中管理它以确保在QTextStream
对象之后删除QString
对象。
我在文档和搜索引擎(例如google,duckduckgo)中都没有找到任何有关此的信息。我找到的所有示例都显示了具有相同生存期的QString
和QTextStream
(同一函数中的局部变量),因此我不确定如果两个对象具有不同的生存期会发生什么。
QTextStream
不拥有QString
的所有权。
实际上,你可以编写这样的函数:
void test()
{
QString s;
QTextStream ts(&s);
///.....
}
如果QTextStream
取得所有权,在这种情况下,QString
将被删除两次,并且会出现运行时错误。但是这个代码是正确的,所以QTextStream
不拥有所有权。
如果文档没有明确说明QTextStream
对象拥有所有权,那么假设它没有所有权是相当安全的。 否则这将是一个非常令人讨厌的遗漏。
但是,如果您不相信文档会通知您,则有两种资源:阅读源代码或测试代码中的行为。
事实证明,QTextStream
不拥有所有权,也永远不会尝试删除QString*
。 这就提出了为什么参数没有声明为const QString*
的问题,但这是一个完全不同的问题。
如果你想要100%的保证,我鼓励你写一个单元测试。 虽然极不可能(这毕竟不是PHP),但行为可能会在以后的版本中发生变化。
相关文章:
- 我是否需要在下一次转移时将所有权*转移回转移队列
- 智能指针概念所有权和寿命
- 对象超出范围/转让所有权
- 从函数返回范围视图时,带有std::span:中间对象所有权的C++Ranges-v3
- QTextStream,用于打印英语和Unicode 16
- 由于QTextStream的无限循环
- 在不授予所有权的情况下公开shared_pointers载体
- 分离类所有权和使用,生成最佳(快速)代码
- std::unique_ptr 在获得所有权之前进行测试
- Qt对象所有权内存泄漏
- QTextStream的操作数到二进制的转换无效
- C++析构函数和所有权
- 分叉后对全局资源的所有权
- 如何将对象的所有权传递给函数的外部
- 使shared_ptr失去对内存的所有权
- 唯一 ptr 将所有权移动到包含对象的方法
- 将 libusb 设备存储在易于访问的容器中,无需所有权
- 如何为生存时间少于对象所有者的类组织对象所有权?
- 取得 streambuf/stringbuf 数据的所有权
- QString 与 QTextStream 的所有权