QString的生命周期问题
Lifetime issues of QString
我有一个这样的类:
class SomeClass {
public:
QString data;
SomeClass(const QString &);
};
和.cpp文件中的
SomeClass::SomeClass(const QString &_data) {
data = _data;
}
那么我这样使用它:
SomeClass c("foobar");
这将调用QString("foobar")并将其传递给SomeClass的构造函数。但是这个QString是一个自动对象,所以它的生命周期将在构造函数之后结束。另一方面,data
不会被复制(据我所知Qt文档),除非修改。这段代码是否可能有终身问题,还是我错了?如何设计得更好?
一切正常。当您销毁您的临时QString数据被修改时,将执行复制。数据修改意味着它可以在任意方向被修改,可以是引用数据的字符串,也可以是包含数据的字符串。
您的代码没问题。事件顺序为:
- 当你将const char* "foobar"传递给构造函数时,会创建一个临时的QString(让我们称之为xx)。
- data被赋值该字符串,即data和xx都引用了字符串主体,现在该字符串主体的refcount为2
- xx超出作用域,字符串主体的refcount变为1,数据仍然引用该主体。
相关文章:
- 警告处理为错误这里有什么问题
- 最小硬币更换问题(自上而下方法)
- 为"adjacent"变量赋值时出现问题
- 我的神经网络不起作用 [XOR 问题]
- 在Ubuntu 16.04上安装Cilk时出现问题
- C++我的数学有什么问题,为什么我的代码不能正确循环
- 编译包含字符串的代码时遇到问题
- Project Euler问题4的错误解决方案
- 问题:什么是QAbstractItemView::NoEditTriggers的反面
- 在编译C++代码(具有dlib和opencv)到WASM时面临问题
- 在进程中对同一管道进行读取和写入时C++管道出现问题
- 静态数据成员的问题-修复链接错误会导致编译器错误
- C++ 雷神库 - 使用资源加载器类时出现问题(不命名类型)
- 一个关于在C++中重载布尔运算符的问题
- 首要问题的答案让值班员搞错了
- setlocale的C++土耳其字符串问题
- 它解决了什么问题,对于非真空初始化,生命周期在初始化之前就开始了
- time_t的时钟周期和获取时间问题
- asio::io_service和thread_group生命周期问题
- QString的生命周期问题