Index: storage.hpp =================================================================== --- storage.hpp (revision 77132) +++ storage.hpp (working copy) @@ -801,14 +801,18 @@ return *this; } - // Swapping - BOOST_UBLAS_INLINE - void swap (shallow_array_adaptor &a) { - if (this != &a) { - std::swap (size_, a.size_); - std::swap (own_, a.own_); - std::swap (data_, a.data_); + // Swapping + BOOST_UBLAS_INLINE + void swap (shallow_array_adaptor& a) { + if (own_ && a.own_) { + if (this != &a) { + std::swap (size_, a.size_); + std::swap (own_, a.own_); + std::swap (data_, a.data_); + } } + else if (data_.get () != a.data_.get ()) + std::swap_ranges (data_, data_+size_, a.data_); } BOOST_UBLAS_INLINE friend void swap (shallow_array_adaptor &a1, shallow_array_adaptor &a2) { @@ -1917,4 +1921,4 @@ }}} -#endif +#endif \ No newline at end of file