Реализация копии на запись - PullRequest
0 голосов
/ 07 февраля 2012

Как это можно сделать для класса, который содержит универсальный член, например:

template<typename T> class SP
{
private:
    T* data;
    reference* ref;
    public:
        //Some methods here to access data
};

1 Ответ

1 голос
/ 02 июля 2014

Я нашел два разных подхода к копированию при записи (COW):

COW Poiner

COWPtr<Object> cow(&obj);
const COWPtr<Object> &cow_ref = cow;
std::cout << cow_ref->name; // operator->() doesn't copy the object because its const overload is used
cow->name = "my object"; // here non const operator->() copies the object
(*cow).name // operator*() also copies the underlying object

Метод WRITE от Adobe stlab

COW<Object> cow(&obj);
std::cout << cow->name; // the object is not copied
cow.write().name = "my object"; // the object is copied here
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...