Coding
C++ Internals

std::shared_ptr and std::weak_ptr

Premium
Difficulty

Read the problem, hints and solution here. The editor needs a bigger screen: open this page on a laptop to write and run your code.

xxxxxxxxx xxxxxxxxx<x> xxx xxxxxxx<x> xxxx xxx xxxxxxx xxxxx xxxx xxxxx x xxxxxx xxxxx xxx x xxxx xxxxx: xxx xxxxxx xxxx xxxx xxx xxxx xxxxxxxxx, xxx xxx xxxxx xxxx xxxx xxx xxxx xxxxxxx xx xxxxxx xxxx. xxxxx xxx::xxxxxx_xxx, xxx::xxxx_xxx xx xxx::xxxxxx_xxx xxxxxx xxxx xx xxxxxx.

x xxxxxxxxx xxxxx xx xxx xxx xxx x xxxx xxxx xxxxxxx xxxxxx xxx xxxxx xxx xxx: xxx xxxxxxx xxxx xxx xxxx xxxxx xxxxx xxxxx xxxx. xxxx_xxx xx xxx xxx xxx, xxxxxxx xx xxxxxxx xx xxxxxx xxxxxxx xxxxxxx xx xxxxx. xxx xxxx xx xx xxxx, xx xxx xx xx xxxx xx xxx "xx xxx xxxxxx xxxxx xxxxx?" xxxxx xxx xxxxxx xxx xxxx, xxx xxxx xxxxxxxx xx xxx xxx xxxxxxx xxxxx xxx x xxxxxxxx xx xxx xxx.

xxxxxxxxx<x>:

  • xxxxxxxxx(): xxxxx. xxx_xxxxx() xx x.
  • xxxxxxxx xxxxxxxxx(x* xxx): xxxx xxx xxxx x xxxxxx xxxxx xx x. x xxxx xxx xxxxx xx xxxxx xxxxxxxxx xxxx xx xxxxxxx xxxxx.
  • xxxx xxxxxxxxxxx xxx xxxx xxxxxxxxxx: xxxxx xxxxxxxxx.
  • xxxx xxxxxxxxxxx xxx xxxx xxxxxxxxxx: xxxxxxxx. xxxx xxxx xxxxxxxxx, xxx xxxxx xxx xxxxxx xxxxx xxxx xx xxxxxx xx xxx xxxxx.
  • ~xxxxxxxxx(): xxxxx xxx xxxxxx xxxxxxxxx.
  • xxxx xxxxx(x* xxx = xxxxxxx): xxxxxxxx xxx xxxxxxx xxxxxxxxx xxxx xxx, xxxxx x xxx xxxxxxx xxxxx, xx xxxx xxxxxxx.
  • xxxx xxxx xxx_xxxxx() xxxxx, x* xxx() xxxxx, x& xxxxxxxx*() xxxxx, x* xxxxxxxx->() xxxxx, xxxxxxxx xxxxxxxx xxxx() xxxxx.

xxxxxxx<x>:

  • xxxxxxx(): xxxxx. xxxxxxx() xx xxxx.
  • xxxxxxx(xxxxx xxxxxxxxx<x>& xxxxx) xxx xxxxxxxx=(xxxxx xxxxxxxxx<x>& xxxxx): xxxxx xxx xxxxxx xx xxxxx. xxx xxxxxx xxxxx xxxx xxx xxxxxx.
  • xxxx xxxxxxxxxxx xxx xxxx xxxxxxxxxx: xxxxx xxx xxxx xxxxxx.
  • xxxx xxxxxxxxxxx xxx xxxx xxxxxxxxxx: xxxxxxxx. xxxx xxxxx xxx xxxxxx xxxxx.
  • ~xxxxxxx(), xxx xxxx xxxxx(), xxxxx xxxxx xx xxxxx.
  • xxxx xxxx xxx_xxxxx() xxxxx: xxx xxxxxx xxxxx xx xxx xxxxxx, x xxxx xx xxx xxxx.
  • xxxx xxxxxxx() xxxxx: xxxx xxxx xxx_xxxxx() xx x.
  • xxxxxxxxx<x> xxxx() xxxxx: x xxx xxxxx xx xxx xxxxxx, xx xx xxxxx xxxxxxxxx xxxx xx xxx xxxx.

xxx xxxxxxxx xxxxxxxx xxxxxxxxxxxx, xxxxx xxxxxx xxx xxxxxxxxxxxxx xxx xxxxxxxxxxxx, xxx xxxxxxxxxxxx, xxxxx xxxxxx xxx xxx. xxx xxxx xxxxxxxxxxxx, xxx xxx xxxxx xxxxxx, xxxx xxxx xxx xxx xxxxx xxxx xxxxxx. xx xxx xxxxxx xxx xxxxxxxx. xxxx xxx xxxxxx xxx xxxx xxxxxx xxxx, xxx xxx xxxx xxxxx, xx xxxxx xx xxxxxx. xxx xxxxx xxxx xxxxxxxxxxxx::xxxxxxx xxx xxxxxxxxxxxx::xxxxx, xx xxx xxxx xx xxx xxxxx xx xxxxxxxx.

xxxxxxxx

xxxxxxx<xxxxxxxxxxxx> x;
{
    xxxxxxxxx<xxxxxxxxxxxx> x(xxx xxxxxxxxxxxx(x));
    x = x;
    x.xxx_xxxxx();               // x: x xxxxxxx xxxx xxx xxxxx xx xx xxxxx
    xxxxxxxxx<xxxxxxxxxxxx> x = x.xxxx();
    x.xxx_xxxxx();               // x: x xxxx xxxx
}
xxxxxxxxxxxx::xxxxxxxxx;         // x: xxx xxxx xxxxx xxx xxxx
x.xxxxxxx();                     // xxxx, xxx xxxxxxx xx xx xxxx
x.xxxx();                        // xx xxxxx xxxxxxxxx

xxx xxxxxx xxx xxxx xxxxx xxxx xxx xxx xxxxxxx xxxxx xxx xxx. xxx xxxxx xxxx xxxx x xxxx.

xxxxxx xxxx { xxxxxxxxx<xxxx> xxxx; xxxxxxx<xxxx> xxxx; };
x->xxxx = x; x->xxxx = x;        // xxxxx: xxxx xxxxxx xxxx xx x xxxxxxx
x->xxxx = x; x->xxxx = x;        // xxxx xxxxx xxx xxxxxxxxx

xxxxxxxxxxx

  • x xxxx xxx xxxx x xxxxxxxxx xx x xxxxxxx xx xxx xxx xxxx, xx x xxx xx xxxxxxxxxx xxxx xxx xxx xxxxxxx xxx xxxxx.
  • xxx xxxxxx xxx xxxx xxx xxxx xxxxxxx xx xxxxxx, xx xxx::xxxxxx_xxxxxx_xxxx_xxxx xxxx. xxxxxxxxxx xxx xxxxxx xxxx xxxxx x xxxx xxxxxxxxx xxxxx xxx xxxxxx xxxxxxx xx xxxxx xxxxxxx. xxx xxxxx xxxx xx xxxxx xxxx xxx xxxx xxx xx xxxx xxxxx xxxx. xxxxxx xxxx xxxxxxxxxx, xxxxxxx() xx xxxx xxx xxxx() xx xxxxx.
  • xxxxxxxxxx xxxx xxxx xx xxxx xxx xxxxxx xxxxx xxxxxx xxx xxxxxx xxxx xxxx: xxxx = xxxx->xxxx xxx xxxx = xxx::xxxx(xxxx->xxxx) xxxx xxxx xx xxxx. xx xxxx x = x xxx x = xxx::xxxx(x) xx xxxxxx xxxx, xxxxxxxxx xx x xxxxxxx xxxx xx xxx xxxx xxxxxxxxx xx xxx xxxxx. x xxxx-xxxxxxxxxx xx xxxxxx xxxx xxxxx xxx xxxxxxxxx xxx xxxxx xxxxxxx.
  • xx xxxxx xxxxxxx xxx xx xxxxxxx xxxxx.
  • xxxxxx-xxxxxxxx: xxxxx xxxxxxx xxxxxx xxx xxxxxxx xxxx. xxx xxxxxxxxx xxxxxx xxxx xxxxxxx xxxxx xxxxxx, xxx xxxx() xx xxxxx xx xxxx xxxxxxxxxxx.
  • xxx xxxxxxxx xxxxxxxxxxx, xxxxxx xxxxxxxx xxx xxxx_xxxxxx xxx xxx xxxx xx xxxx xxxxxxx.

This problem is only available to subscribers.

Language: C++23SharedPtr

Unlock the problem to run it against the tests.