Skip to content

Commit

Permalink
Deprecate RelinkableHandle constructor taking a raw pointer
Browse files Browse the repository at this point in the history
  • Loading branch information
sweemer committed May 29, 2024
1 parent b981510 commit fe55b28
Showing 1 changed file with 26 additions and 5 deletions.
31 changes: 26 additions & 5 deletions ql/handle.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,10 @@ namespace QuantLib {
//@{
Handle()
: Handle(ext::shared_ptr<T>()) {}
explicit Handle(ext::shared_ptr<T> p,
explicit Handle(const ext::shared_ptr<T>& p,
bool registerAsObserver = true)
: link_(new Link(p, registerAsObserver)) {}
explicit Handle(ext::shared_ptr<T>&& p,
bool registerAsObserver = true)
: link_(new Link(std::move(p), registerAsObserver)) {}
//@}
Expand Down Expand Up @@ -111,13 +114,26 @@ namespace QuantLib {
template <class T>
class RelinkableHandle : public Handle<T> {
public:
RelinkableHandle()
: RelinkableHandle(ext::shared_ptr<T>()) {}
explicit RelinkableHandle(
const ext::shared_ptr<T>& p,
bool registerAsObserver = true);
explicit RelinkableHandle(
const ext::shared_ptr<T>& p = ext::shared_ptr<T>(),
ext::shared_ptr<T>&& p,
bool registerAsObserver = true);
/*! \deprecated Use one of the constructors taking shared_ptr.
Deprecated in version 1.35.
*/
#if defined(_MSC_VER) && (_MSC_VER < 1916)
QL_DEPRECATED
#else
[[deprecated("Use one of the constructors taking shared_ptr.")]]
#endif
explicit RelinkableHandle(
T* p,
bool registerAsObserver = true);
void linkTo(const ext::shared_ptr<T>&,
void linkTo(ext::shared_ptr<T> h,
bool registerAsObserver = true);
};

Expand Down Expand Up @@ -178,15 +194,20 @@ namespace QuantLib {
bool registerAsObserver)
: Handle<T>(p,registerAsObserver) {}

template <class T>
inline RelinkableHandle<T>::RelinkableHandle(ext::shared_ptr<T>&& p,
bool registerAsObserver)
: Handle<T>(std::move(p), registerAsObserver) {}

template <class T>
inline RelinkableHandle<T>::RelinkableHandle(T* p,
bool registerAsObserver)
: Handle<T>(p,registerAsObserver) {}

template <class T>
inline void RelinkableHandle<T>::linkTo(const ext::shared_ptr<T>& h,
inline void RelinkableHandle<T>::linkTo(ext::shared_ptr<T> h,
bool registerAsObserver) {
this->link_->linkTo(h,registerAsObserver);
this->link_->linkTo(std::move(h), registerAsObserver);
}

}
Expand Down

0 comments on commit fe55b28

Please sign in to comment.