-

   vizhim

 - e-mail

 

 -

 LiveInternet.ru:
: 14.07.2010
: 115
: 9
: 123

:


22 - , . / Albert Makhmutov

, 01 2010 . 12:51 +

, . , : " , " ! , . , , , , - , , 40- ? , , , , ? ? : smart- ; , ( ) , .

, :

1. , , ( ).

2. , .

3. .

. , - , () (). smart-. - , - , , - , , .

#include iostream.h

// .

class CSomeClass {

public:

int x;

int y;

};


// : smart-pointer .

class CSimpleTr {

public:

CSomeClass* that; //

CSomeClass* previos; //

public:

// ---

CSimpleTr(): previos(NULL), that(new CSomeClass) {}

CSimpleTr(const CSimpleTr& _st): that(new CSomeClass(*(_st.that))), previos(NULL) {}

~CSimpleTr() {delete that; delete previos;}

CSimpleTr& operator=(const CSimpleTr& _st) {

if (this!=&_st) {

delete that;

that = new CSomeClass(*(_st.that));

}

return *this;

}

//

void BeginTrans() {

delete previos;

previos = that;

that = new CSomeClass(*previos);

}

//

void Commit() {

delete previos;

previos = NULL;

}

//

void Rollback() {

if (previos != NULL) {

delete that;

that = previos;

previos = NULL;

}

}

//

CSomeClass* operator-() { return that; }

};


int main (void) {

//

CSimpleTr lvPair;

lvPair-x = 5;

lvPair-y = 8;

lvPair.BeginTrans();

lvPair-x = 7;

lvPair-y = 11;

lvPair.Rollback();

lvPair.BeginTrans();

lvPair-x = 7;

lvPair-y = 11;

lvPair.Commit();

return 0;

}

? , . , ; CSomeClass , . CSimpleTr , , isStarted(). . MTS, , , : SetAbort(); SetComplete(); , SetAbort(); .


: [1] []
 

:
: 

: ( )

:

  URL