Как можно реализовать конструктор копирования std :: auto_ptr?

Вернемся к моему безумному AutoArray thingy ... (цитируем важные фрагменты оттуда:

class AutoArray
{
    void * buffer;
public:
    //Creates a new empty AutoArray
    AutoArray();
    //std::auto_ptr copy semantics
    AutoArray(AutoArray&); //Note it can't be const because the "other" reference
                           //is null'd on copy...
    AutoArray& operator=(AutoArray);
    ~AutoArray();
    //Nothrow swap
    // Note: At the moment this method is not thread safe.
    void Swap(AutoArray&);
};

)

В любом случае, пытаюсь реализовать конструктор копирования . Есть фрагмент клиентского кода (еще не зафиксированный в битбакете, потому что он не собирается), который выглядит следующим образом:

AutoArray NtQuerySystemInformation(...) { ... };

AutoArray systemInfoBuffer = NtQuerySystemInformation(...);

Это не удается, потому что конструктор копирования принимает в качестве аргумента ссылку, отличную от const .. .. но я не понимаю, как можно изменить конструктор копирования, чтобы он использовал ссылку const , учитывая, что исходный AutoArray , используемый в назначении, изменен (и, следовательно, не будет быть const ). Вы, конечно, не можете изменять вещи, чтобы использовать передачу по значению, потому что это конструктор копирования, и это будет бесконечный цикл!

Если бы я использовал auto_ptr , это было бы правильно:

std::auto_ptr NtQuerySystemInformation(...) { ... };

std::auto_ptr systemInfoBuffer = NtQuerySystemInformation(...);

Как тогда может быть возможен класс с семантикой копирования auto_ptr ?

6
задан James McNellis 28 December 2010 в 03:24
поделиться