diff options
author | Gael Guennebaud <g.gael@free.fr> | 2015-10-06 11:57:03 +0200 |
---|---|---|
committer | Gael Guennebaud <g.gael@free.fr> | 2015-10-06 11:57:03 +0200 |
commit | 945b80c83e3bb7320667e8a9a45fc4912af85c79 (patch) | |
tree | 51429d62d50ca3f91f8bee808cebc9d7b8626d0c /Eigen/src/SparseCore/SparseRef.h | |
parent | 9a070638de607a3bb46ae777da8cf9757f527fd8 (diff) |
Optimize Ref<SparseMatrix> by removing useless default initialisation of SparseMapBase and SparseMatrix
Diffstat (limited to 'Eigen/src/SparseCore/SparseRef.h')
-rw-r--r-- | Eigen/src/SparseCore/SparseRef.h | 12 |
1 files changed, 7 insertions, 5 deletions
diff --git a/Eigen/src/SparseCore/SparseRef.h b/Eigen/src/SparseCore/SparseRef.h index 08268b9e1..fbd489a13 100644 --- a/Eigen/src/SparseCore/SparseRef.h +++ b/Eigen/src/SparseCore/SparseRef.h @@ -182,8 +182,9 @@ class Ref<const SparseMatrix<MatScalar,MatOptions,MatIndex>, Options, StrideType { if((Options & int(StandardCompressedFormat)) && (!expr.isCompressed())) { - m_object = expr; - Base::construct(m_object); + TPlainObjectType* obj = reinterpret_cast<TPlainObjectType*>(m_object_bytes); + ::new (obj) TPlainObjectType(expr); + Base::construct(*obj); } else { @@ -194,12 +195,13 @@ class Ref<const SparseMatrix<MatScalar,MatOptions,MatIndex>, Options, StrideType template<typename Expression> void construct(const Expression& expr, internal::false_type) { - m_object = expr; - Base::construct(m_object); + TPlainObjectType* obj = reinterpret_cast<TPlainObjectType*>(m_object_bytes); + ::new (obj) TPlainObjectType(expr); + Base::construct(*obj); } protected: - TPlainObjectType m_object; + char m_object_bytes[sizeof(TPlainObjectType)]; }; |