consolidate all repos to one for archive
This commit is contained in:
60
semester_2/programiranje_2/naloga0902/SmartPointer.h
Normal file
60
semester_2/programiranje_2/naloga0902/SmartPointer.h
Normal file
@@ -0,0 +1,60 @@
|
||||
#ifndef NALOGA0901_SMARTPOINTER_H
|
||||
#define NALOGA0901_SMARTPOINTER_H
|
||||
|
||||
#include "ReferenceCounter.h"
|
||||
|
||||
template<typename T>
|
||||
class SmartPointer {
|
||||
private:
|
||||
T *pointer;
|
||||
ReferenceCounter *used;
|
||||
public:
|
||||
SmartPointer() {
|
||||
used = new ReferenceCounter();
|
||||
++*used;
|
||||
}
|
||||
|
||||
SmartPointer(T *pointer) : pointer(pointer) {
|
||||
used = new ReferenceCounter();
|
||||
++*used;
|
||||
}
|
||||
|
||||
SmartPointer(const SmartPointer<T> &p1) : pointer(p1.pointer), used(p1.used) {
|
||||
++*used;
|
||||
}
|
||||
|
||||
~SmartPointer() {
|
||||
if (--*used == 0) {
|
||||
delete pointer;
|
||||
delete used;
|
||||
}
|
||||
}
|
||||
|
||||
T &operator*() {
|
||||
return *pointer;
|
||||
}
|
||||
|
||||
T *operator->() {
|
||||
return pointer;
|
||||
}
|
||||
|
||||
SmartPointer<T> &operator=(const SmartPointer<T> &sp) {
|
||||
if (this != &sp) {
|
||||
if (--*used == 0) {
|
||||
delete pointer;
|
||||
delete used;
|
||||
}
|
||||
pointer = sp.pointer;
|
||||
used = sp.used;
|
||||
++*used;
|
||||
}
|
||||
return *this;
|
||||
}
|
||||
|
||||
unsigned int useCount() {
|
||||
return used->useCount();
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
#endif //NALOGA0901_SMARTPOINTER_H
|
||||
Reference in New Issue
Block a user