|
Boost : |
From: Kevlin Henney (kevlin_at_[hidden])
Date: 2000-03-07 03:33:33
In message <Pine.LNX.4.10.10003061513200.6848-100000_at_kevins-linux>,
Kevin Atkinson <kevinatk_at_[hidden]> writes
>
>> template <typename T>
>> CopyPtr<T> & CopyPtr<T>::operator= (const CopyPtr<T> & other)
>> {
>> delete ptr;
>> if (other.ptr != 0)
>> ptr = new T(*other.ptr);
>> else
>> ptr = 0;
>> return *this;
>> }
>
>Here is a more complicated but more efficient operator=:
>
> template <typename T>
> CopyPtr<T> & CopyPtr<T>::operator= (const CopyPtr<T> & other)
> {
> if (other.ptr == 0) {
> delete ptr;
> ptr = 0;
> } else if (ptr == 0) {
> if (other.ptr == 0)
> ptr = 0;
> else
> ptr = new T(*other.ptr);
> } else {
> *ptr = *other.ptr;
> }
> return *this;
> }
And here is one that is simpler, exception safe, but only as efficient
as the original version:
template<typename T>
CopyPtr<T> & CopyPtr<T>::operator=(const CopyPtr & other)
{
T * old = ptr;
ptr = other.ptr ? new T(*other.ptr) : 0;
delete old;
return *this;
}
____________________________________________________________
Kevlin Henney Without art we are nothing
kevlin_at_[hidden] but monkeys with car keys
kevlin_at_[hidden]
____________________________________________________________
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk