@@ -74,7 +74,7 @@ template <class T, class D> class CompressedStack : public Stack<T, D> {
7474 void setSign (int component, Signature<T, D> sign = Signature<T, D>());
7575 void setLast (int component, int index, int lvl = -1 );
7676 int getLast (int lvl, int component = 0 );
77- Signature<T, D> * getSign (int component, int lvl = 0 );
77+ std::shared_ptr< Signature<T, D>> getSign (int component, int lvl = 0 );
7878
7979 /* Push related */
8080 void pushExplicit (SPData<T, D> elt);
@@ -324,16 +324,14 @@ int CompressedStack<T, D>::getLast(int lvl, int component) {
324324}
325325
326326template <class T , class D >
327- Signature<T, D> *CompressedStack<T, D>::getSign(int component, int lvl) {
328- Signature<T, D> *sign;
327+ std::shared_ptr<Signature<T, D>> CompressedStack<T, D>::getSign(int component, int lvl) {
329328 if (lvl == 0 ) {
330- sign = & mCompressed .back ();
329+ return std::make_shared<Signature<T, D>>( mCompressed .back () );
331330 } else if (component == 1 ) {
332- sign = & mFirst .mPartial [lvl - 1 ].back ();
331+ return std::make_shared<Signature<T, D>>( mFirst .mPartial [lvl - 1 ].back () );
333332 } else {
334- sign = & mSecond .mPartial [lvl - 1 ].back ();
333+ return std::make_shared<Signature<T, D>>( mSecond .mPartial [lvl - 1 ].back () );
335334 }
336- return sign;
337335}
338336
339337/* ==============================================================================
@@ -616,7 +614,7 @@ void CompressedStack<T, D>::compress(Block<T, D> block) {
616614==============================================================================*/
617615template <class T , class D >
618616void CompressedStack<T, D>::reconstruct(Problem<T, D> &problem) {
619- Signature<T, D> * sign = new Signature<T,D>() ;
617+ std::shared_ptr< Signature<T, D>> sign;
620618 int lvl;
621619 for (lvl = mDepth ; lvl >= 0 ; lvl--) {
622620 if (lvl == 0 ) {
0 commit comments