Qt неявно разделяемый контейнер явно разделяемого элемента - PullRequest
0 голосов
/ 03 апреля 2012

Я создал класс Foo, который явно используется совместно. В моей программе есть элемент данных QVector<Foo> data;, который я передаю между различными классами по ссылке для оптимизации использования памяти.

Во время выполнения объект может изменить определенный элемент data. Например:

Foo item = data.at(0);
item.setName("newName");

Я хотел бы знать, если новый вектор был глубоко скопирован из-за COW, или просто Foo объект в местоположении 0 изменил только свое имя?

1 Ответ

1 голос
/ 03 апреля 2012

В вашем примере item содержит копию элемента Foo в позиции 0 в data. Это потому, что QVector::at() возвращает константную ссылку, а = говорит, что нужно скопировать ее в item.

Если у вас было:

Foo & item = data[0];
item.setName("newName"); // <--- typo of single quotes here in your version

Элемент Foo в позиции 0 в QVector теперь будет иметь имя "newName", потому что в этом примере item является ссылкой, а операторы QVector [] возвращают неконстантную ссылку на фактическую Foo.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...