по значению.
ться на мой сумасшедшийАвтоархив... (цитируя важные биты оттуда:
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&);
};
)
Во всяком случае, пытаясь реализовать конструктор копирования. Есть фрагмент кода клиента (еще не зафиксированный в bitbucket, потому что он не будет собран), который выглядит следующим образом:
AutoArray NtQuerySystemInformation(...) { ... };
AutoArray systemInfoBuffer = NtQuerySystemInformation(...);
Это терпит неудачу, потому что конструктор копирования принимает неconst
ссылка в качестве аргумента .... но я не вижу, как вы могли бы изменить конструктор копирования, чтобы взятьconst
ссылка, учитывая, что источникAutoArray
используется в назначении изменен (и, следовательно, не будетconst
). Конечно, вы не можете изменять вещи так, чтобы они передавались по значению, потому что это конструктор копирования, и это был бы бесконечный цикл!
Если бы я использовалauto_ptr
, это будет действительным:
std::auto_ptr NtQuerySystemInformation(...) { ... };
std::auto_ptr systemInfoBuffer = NtQuerySystemInformation(...);
Как тогда, может, класс сauto_ptr
семантика копирования возможна?