---
name: "shevek_crefbase"
section: "3"
platform: "linux"
package: "libshevek-doc"
version: "1.4-1"
release: "Debian 8 (Jessie)"
platforms: ["linux"]
url: "https://new.carta.tech/shevek_crefbase"
---

# shevek\_crefbase(3)

Circular-dependancy-protected reference-counting object base class.

## NAME

shevek::crefbase -

Circular-dependancy-protected reference-counting object base class.

## SYNOPSIS

`#include <crefptr.hh>`

### Public Member Functions

void **init\_done** (int code=0)\
 *After calling this, the object is destroyed without references.*

### Static Public Member Functions

static int **set\_default\_tag** (int tag)\
 *Set the default tag for when init\_done is called.*  static void **check** (bool fatal=true)\
 *Check if all objects have called init\_done.*

### Protected Member Functions

**crefbase** ()\
 *Constructor, which is called when an object is created.*  virtual **~crefbase** ()\
 *Virtual destructor, which does nothing except allowing derived class to have a virtual destructor.*

### Friends

template\<typename \_T \> class **crefptr**\

## Detailed Description

Circular-dependancy-protected reference-counting object base class.

Objects which derive from this class are reference-counted in a way that detects dependency loops and destroys the entire loop when it is no longer externally referenced. For this, it is important that objects which contain pointers register them appropriately.

## Member Function Documentation

### static void shevek::crefbase::check (boolfatal = `true`)` [inline]`, ` [static]`

Check if all objects have called init\_done. When debugging is enabled, this function checks for all objects if they have called init\_done. When debugging is not enabled, no list of objects is kept, and this check does nothing.

### void shevek::crefbase::init\_done (intcode = `0`)` [inline]`

After calling this, the object is destroyed without references. On creation, an object does not have any references. To prevent immediate destruction, it is first in an initialisation phase. During that phase, it will not be destroyed, even if it has no references. This function should be called immeiately after creating the object (normally through **crefptr::init**): **shevek::crefptr** \<foo\> bar = foo::create ().init (); If code is not given or 0, the default tag (set with set\_default\_tag) will be used.

### static int shevek::crefbase::set\_default\_tag (inttag)` [inline]`, ` [static]`

Set the default tag for when init\_done is called. If the tag is not set to 1, a message will be printed to standard error on destruction. The previous tag is returned. If tag is set to 0, the old value is not changed. The initial default value is 1.

## Author

Generated automatically by Doxygen for libshevek from the source code.
