Уточнить определенную догадку из старой классики [закрыто]C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Уточнить определенную догадку из старой классики [закрыто]

Сообщение Anonymous »

Моя ссылка на то, чтобы защищать общие контейнеры, защищенные от исключений < /p>
Я не читал это раньше, и это показалось мне странным, что я воспринимаю как типографские ошибки в таких хорошо продуманных Вне, хорошо написанная статья. Если я что -то не упускаю.

Код: Выделить всё

template
T* NewCopy( const T* src,
size_t   srcsize,
size_t   destsize ) {
assert( destsize >= srcsize );
T* dest = new T[destsize];
try {
copy( src, src+srcsize, dest );    // copy is part of the STL;
// see Item M35
} catch(...) {
delete[] dest;                    // this can't throw
throw;                             // rethrow original exception
}
return dest;
}
в отличие от того, как это было упомянуто в трех разных местах:
В определении конструктора копирования для стека class Шаблон: < /p>

Код: Выделить всё

template
Stack::Stack( const Stack& other )
: v_(NewCopy( other.v_,
other.vsize_,
other.vsize_ )),
vsize_(other.vsize_),
vused_(other.vused_)
{ }
В определении оператора назначения для стека Шаблон класса

Код: Выделить всё

template
Stack&
Stack::operator=( const Stack& other ) {
if( this != &other ) {
T* v_new = NewCopy( other.v_,
other.vsize_,
other.vsize_ );
delete[] v_;  // this can't throw
v_ = v_new;    // take ownership
vsize_ = other.vsize_;
vused_ = other.vused_;
}
return *this;    // safe, no copy involved
}
В определении метода push для стека Шаблон класса:

Код: Выделить всё

template
void Stack::Push( const T& t ) {
if( vused_ == vsize_ )             // grow if necessary
{                                  // by some grow factor
size_t vsize_new = vsize_*2+1;
T* v_new = NewCopy( v_, vsize_, vsize_new );
delete[] v_;                    // this can't throw
v_ = v_new;                      // take ownership
vsize_ = vsize_new;
}
v_[vused_] = t;
++vused_;
}
контрастирует с первыми двумя экземплярами с третьими, очевидно, что использование соответствует определению в третьем экземпляре, а не в случае первых двух экземпляров.
это понимание правильно? < /p>

Подробнее здесь: https://stackoverflow.com/questions/794 ... ld-classic
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»