QString的终身问题

时间:2011-07-08 11:08:26

标签: c++ qt lifetime

我有一个这样的课程:

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文档)。这段代码是否可能存在终身问题,或者我错了吗?如何更好地设计?

2 个答案:

答案 0 :(得分:5)

一切都好。当您销毁临时QString数据被修改时,将执行复制。数据修改意味着它将在任何一侧,在引用数据的字符串或包含数据的字符串中进行修改。

答案 1 :(得分:4)

您的代码没问题。事件的顺序是:

  1. 当你传递const char *" foobar"时,会创建一个临时的QString(我们称之为xx)。到构造函数
  2. 为数据分配该字符串,即数据和xx都引用现在具有2的引用数的字符串主体
  3. xx超出范围,字符串主体的引用计数变为1,数据仍引用此主体。