QSharedData и operator =

Недавно я хотел реализовать функцию неявного совместного использования, как это делает Qt со своими QSharedData а также QSharedDataPointer классы, поэтому я взглянул на их источники и на месте QSharedData Я нашел эти три строки:

private:
// using the assignment operator would lead to corruption in the ref-counting
QSharedData &operator=(const QSharedData &);

Однако я не понимаю, как мог operator= прервать подсчет ссылок.

Если бы я просто не сделал его закрытым и оставил его реализацию пустой, разве это не послужило бы той же цели?

то есть если бы я написал просто так:

    public:
QSharedData &operator=(const QSharedData & ) { return *this; }

4

Решение

Вся цель QSharedData это поддерживать счетчик ссылок. Если вы назначаете одно другому, что должно произойти с подсчетом ссылок на каждой стороне? Как вы правильно определили: ничего. Просто не имеет смысла назначать один QSharedData к другому, и, следовательно, разумный курс действий состоит в том, чтобы предотвратить это во время компиляции.

4

Другие решения

Нет, это было бы плохо, если он делает подсчет ссылок, ему нужно вести бухгалтерский учет и просто вернуть его this будет означать, что есть копии QSharedData неучтенный. этот пример из C ++ faq в основном показывает, какой вид бухгалтерского учета необходим для operator = в объекте подсчета ссылок.

2

По вопросам рекламы [email protected]