22 - , . / Albert Makhmutov |
, . , : " , " ! , . , , , , - , , 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(); .