Wt: Wt::Dbo::weak_ptr< C > Class Template Reference

Wt 4.10.4

Loading...
Searching...
No Matches
Public Member Functions | List of all members
Wt::Dbo::weak_ptr< C > Class Template Reference
Database Objects (Wt::Dbo)

A weak pointer for a database object. More...

`#include <Wt/Dbo/weak_ptr.h>`

## Public Member Functions
| weak_ptr ()
| Creates a new weak pointer.
| weak_ptr (const weak_ptr< C > &other)
| Copy constructor.
| weak_ptr (weak_ptr< C > &&other) noexcept
| Move constructor.
void | reset (C *obj=0)
| Sets the value.
weak_ptr< C > & | operator= (const weak_ptr< C > &other)
| Copy assignment operator.
weak_ptr< C > & | operator= (weak_ptr< C > &&other) noexcept
| Move assignment operator.
weak_ptr< C > & | operator= (const ptr< C > &other)
| Copy assignment operator.
const C * | operator-> () const
| Dereference operator.
C * | modify () const
| Dereference operator, for writing.
bool | operator== (const weak_ptr< C > &other) const
| Comparison operator.
bool | operator== (const ptr< C > &other) const
| Comparison operator.
bool | operator!= (const weak_ptr< C > &other) const
| Comparison operator.
bool | operator!= (const ptr< C > &other) const
| Comparison operator.
| operator bool () const
| Checks for null.
| operator ptr< C > () const
| Casting operator to a ptr.
ptr< C > | query () const
| Promotes to a ptr.
ptr< C > | lock () const
| Promotes to a ptr.
dbo_traits< C >::IdType | id () const
| Returns the object id.

## Detailed Description

template<class C>
class Wt::Dbo::weak_ptr< C >

A weak pointer for a database object.

A weak_ptr has similar API and capabilities as a ptr, but does not actually store a reference to the object itself. Instead, it uses a query to retrieve the object.

It is used only to implement a OneToOne relation:

- class A hasOne class B object, in a weak_ptr
- class B belongsTo a class A object, in a ptr

This cannot be implemented using two plain ptr's because otherwise a cycle would be created which interferes with the count-based shared pointer implementation of ptr.

Only in a OneToOne relation, the required querying logic for the weak_ptr to function properly is provided by the hasOne() call, and thus a weak_ptr cannot be used outside of a OneToOne relation.

The weak_ptr has almost the same capabilities as a ptr, except that it does not provide a dereference operator (*).

It's important to realize that reading a weak_ptr results in a query, and thus you may want to first convert the weak_ptr into a plain ptr when needing multiple operations.

A Wt::Dbo::ptr<C> can be converted to a Wt::Dbo::ptr<const C> when extracting data from Dbo objects. There are overloads for the copy constructor, copy assignment, and comparison operators to make this work as expected.

## Constructor & Destructor Documentation

## ◆ weak_ptr()

template<class C >

Wt::Dbo::weak_ptr< C >::weak_ptr | ( |  | ) |

Creates a new weak pointer.

The ptr does not point to anything.

## Member Function Documentation

## ◆ id()

template<class C >

dbo_traits< C >::IdType Wt::Dbo::weak_ptr< C >::id | ( |  | ) | const

Returns the object id.

Since this needs to query the value, you should have an active transaction.

## ◆ lock()

template<class C >

ptr< C > Wt::Dbo::weak_ptr< C >::lock | ( |  | ) | const

Promotes to a ptr.

Returns the value as a plain ptr.

Since this needs to query the value, you should have an active transaction.

This is equivalent to query() or the ptr<C> cast operator.

## ◆ modify()

template<class C >

weak_ptr< C >::mutator Wt::Dbo::weak_ptr< C >::modify | ( |  | ) | const

Dereference operator, for writing.

Returns the underlying object (or, rather, a proxy for it) with the intention to modify it. The proxy object will mark the object as dirty from its destructor. An involved modification should therefore preferably be implemented as a separate method or function to make sure that the object is marked as dirty after the whole modification:

weak_ptr<A> a = ...;
a.modify()->doSomething();
Wt::Dbo::weak_ptr
A weak pointer for a database object.
Definition weak_ptr.h:51

Since this needs to query the value, you should have an active transaction.

## ◆ operator bool()

template<class C >

Wt::Dbo::weak_ptr< C >::operator bool | ( |  | ) | const
| explicit

Checks for null.

Returns true if the pointer is pointing to a non-null object.

Since this needs to query the value, you should have an active transaction.

## ◆ operator ptr< C >()

template<class C >

Wt::Dbo::weak_ptr< C >::operator ptr< C > | ( |  | ) | const

Casting operator to a ptr.

Returns the value as a plain ptr.

Since this needs to query the value, you should have an active transaction.

## ◆ operator!=() [1/2]

template<class C >

bool Wt::Dbo::weak_ptr< C >::operator!= | ( | const ptr< C > & | other | ) | const

Comparison operator.

Two pointers are equal if and only if they reference the same database object.

Since this needs to query the value, you should have an active transaction.

## ◆ operator!=() [2/2]

template<class C >

bool Wt::Dbo::weak_ptr< C >::operator!= | ( | const weak_ptr< C > & | other | ) | const

Comparison operator.

Two pointers are equal if and only if they reference the same database object.

Since this needs to query the value, you should have an active transaction.

## ◆ operator->()

template<class C >

weak_ptr< C >::accessor Wt::Dbo::weak_ptr< C >::operator-> | ( |  | ) | const

Dereference operator.

Note that this operator returns a const copy of the referenced object. Use modify() to get a non-const reference.

Since this needs to query the value, you should have an active transaction.

## ◆ operator=() [1/2]

template<class C >

weak_ptr< C > & Wt::Dbo::weak_ptr< C >::operator= | ( | const ptr< C > & | other | ) |

Copy assignment operator.

Since this needs to query the previous value, you should have an active transaction.

## ◆ operator=() [2/2]

template<class C >

weak_ptr< C > & Wt::Dbo::weak_ptr< C >::operator= | ( | const weak_ptr< C > & | other | ) |

Copy assignment operator.

Since this needs to query the previous value, you should have an active transaction.

## ◆ operator==() [1/2]

template<class C >

bool Wt::Dbo::weak_ptr< C >::operator== | ( | const ptr< C > & | other | ) | const

Comparison operator.

Two pointers are equal if and only if they reference the same database object.

Since this needs to query the value, you should have an active transaction.

## ◆ operator==() [2/2]

template<class C >

bool Wt::Dbo::weak_ptr< C >::operator== | ( | const weak_ptr< C > & | other | ) | const

Comparison operator.

Two pointers are equal if and only if they reference the same database object.

Since this needs to query the value, you should have an active transaction.

## ◆ query()

template<class C >

ptr< C > Wt::Dbo::weak_ptr< C >::query | ( |  | ) | const

Promotes to a ptr.

Returns the value as a plain ptr.

Since this needs to query the value, you should have an active transaction.

This is equivalent to lock() or the ptr<C> cast operator.

## ◆ reset()

template<class C >

void Wt::Dbo::weak_ptr< C >::reset | ( | C * | obj = 0 | ) |

Sets the value.

This is assigns a new value, and:

p.reset(obj);

is equivalent to:

p = Wt::Dbo::ptr<T>(obj);
Wt::Dbo::ptr
A smart pointer for a database object.
Definition WGlobal.h:283

Since this needs to query the previous value, you should have an active transaction.