aboutsummaryrefslogtreecommitdiffhomepage
path: root/Eigen/src/SparseCore/SparseRef.h
diff options
context:
space:
mode:
authorGravatar Gael Guennebaud <g.gael@free.fr>2015-10-06 11:57:03 +0200
committerGravatar Gael Guennebaud <g.gael@free.fr>2015-10-06 11:57:03 +0200
commit945b80c83e3bb7320667e8a9a45fc4912af85c79 (patch)
tree51429d62d50ca3f91f8bee808cebc9d7b8626d0c /Eigen/src/SparseCore/SparseRef.h
parent9a070638de607a3bb46ae777da8cf9757f527fd8 (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.h12
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)];
};