具有qList引用的构造函数,它是如何工作的
Constructor with qList reference, how does it work?
Im在qt中创建了一个模型,并遇到了以下代码:
class StringListModel : public QAbstractListModel
{
Q_OBJECT
public:
StringListModel(const QStringList &strings, QObject *parent = 0)
: QAbstractListModel(parent), stringList(strings) {}
int rowCount(const QModelIndex &parent = QModelIndex()) const;
QVariant data(const QModelIndex &index, int role) const;
QVariant headerData(int section, Qt::Orientation orientation,
int role = Qt::DisplayRole) const;
private:
QStringList stringList;
};
现在我想知道,这行吗?如果将一个qstringlist传递到堆栈的本地函数中,并且它超出了作用域,那么这个对象会丢失它的字符串列表吗?
同时阅读:构造函数中的C++引用以及:接受字符串引用的构造函数。坏主意?
有些人说它将是无效的,但有些人说字符串(在他们的例子中)将被复制到局部变量。这真是令人困惑。
如果我理解您的要求,那么您是否担心QStringList &strings
是通过引用传递的?
初始化列表调用stringList(const &QStringList)
复制构造函数。此复制构造函数将传递的&QStringList
对象的状态复制到一个新对象,并将该对象分配给stringList
。这样,即使原始&strings
超出范围或以其他方式被销毁,也无关紧要,因为stringList
指向不同的对象。
在您的第二个链接中,没有调用复制构造函数。。。成员对象被指定指向传递给它的同一对象。如果传递的对象在程序的稍后被销毁,则成员对象仍将指向该销毁的对象,从而使其无效。
相关文章:
- QSqlquery prepare()和bindvalue()不工作
- 导入库可以跨dll版本工作吗
- 以螺旋方式打印矩阵的程序.(工作不好)
- 对象指针在c++中是如何工作的
- 为什么在Windows上的VS 2019和Clang 9中"size_t"在没有标题的情况下工作
- VSOMEIP-2个设备之间的通信(TCP/UDP)不工作
- 为字符串中每 N 个字符插入空格的函数没有按照我认为的方式工作?
- C++为线程工作动态地分割例程
- 为什么我的 std::ref 无法按预期工作?
- 布尔比较运算符是如何在C++中工作的
- SampleConsensusPrerejective(ext.RANSAC)是如何真正工作的
- 不确定要在我的main中放入什么才能使我的代码正常工作
- 为什么std::condition_variable notify_all的工作速度比notify_one快(对于随机请
- <<操作员在下面的行中工作
- 有人能解释一下为什么下界是这样工作的吗C++的
- ExtractIconEx:可以工作,但偶尔会崩溃
- C++中的memset函数工作不正常
- 当我在第一个循环中使用"auto"时,它工作正常,但是使用"int"它会给出错误,为什么?
- 链表c++插入,所有情况都已检查,但没有任何工作
- 当 int 方法工作正常时,void 方法有何不同,或者为什么我不能调用 void 方法?