Skip to content

Commit a08998d

Browse files
committed
- Fixes for destructors
1 parent a5a706b commit a08998d

File tree

3 files changed

+11
-10
lines changed

3 files changed

+11
-10
lines changed

src/ESPressio_IObservable.hpp

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,5 @@
11
#pragma once
22

3-
#include <functional>
4-
#include <memory>
5-
63
#include "ESPressio_IObserver.hpp"
74

85
namespace ESPressio {
@@ -14,6 +11,7 @@ namespace ESPressio {
1411
/// It is used to not only check if the `IObservable` still exists, but also to unregister the Observer when desired!
1512
class IObserverHandle {
1613
public:
14+
virtual ~IObserverHandle() = default;
1715
/// Will Unregister this Observer from the `IObservable` if it still exists
1816
virtual void Unregister() = 0;
1917
/// Will return a `weak_ptr` to the `IObservable`
@@ -22,8 +20,9 @@ namespace ESPressio {
2220
virtual IObserver* GetObserver() = 0;
2321
};
2422

25-
class IObservable : public std::enable_shared_from_this<IObservable> {
23+
class IObservable {
2624
public:
25+
virtual ~IObservable() = default;
2726
/// Will Register the`IObserver` with this `IObservable`
2827
virtual IObserverHandle* RegisterObserver(IObserver* observer) = 0;
2928
/// Will Unregister the `IObserver` from this `IObservable`

src/ESPressio_Observable.hpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,12 +44,13 @@ namespace ESPressio {
4444
}
4545
IObserverHandle* handle = new ObserverHandle(this, observer);
4646
_observers.push_back(handle);
47+
return handle;
4748
}
4849

4950
virtual void UnregisterObserver(IObserver* observer) {
5051
for (auto thisObserver = _observers.begin(); thisObserver != _observers.end(); thisObserver++) {
5152
if ((*thisObserver)->GetObserver() == observer) {
52-
(*thisObserver)->Unregister();
53+
static_cast<ObserverHandle*>((*thisObserver))->__invalidate();
5354
_observers.erase(thisObserver);
5455
return;
5556
}

src/ESPressio_ObserverHandle.hpp

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -14,24 +14,25 @@ namespace ESPressio {
1414
public:
1515
ObserverHandle(IObservable* observable, IObserver* observer) : _observable(observable), _observer(observer) {}
1616

17-
~ObserverHandle() {
17+
~ObserverHandle() override {
1818
Unregister();
1919
}
2020

21-
virtual void __invalidate() {
21+
void __invalidate() {
2222
_observable = nullptr;
2323
}
2424

25-
virtual void Unregister() {
25+
void Unregister() override {
2626
if (_observable == nullptr) { return; }
2727
_observable->UnregisterObserver(_observer);
28+
__invalidate();
2829
}
2930

30-
virtual IObservable* GetObservable() {
31+
IObservable* GetObservable() override {
3132
return _observable;
3233
}
3334

34-
virtual IObserver* GetObserver() {
35+
IObserver* GetObserver() override {
3536
return _observer;
3637
}
3738
};

0 commit comments

Comments
 (0)