---
name: "Resource"
section: "3"
platform: "linux"
package: "ivtools-dev"
version: "1.1.3-4"
release: "Debian 3.1 (Sarge)"
platforms: ["linux"]
url: "https://new.carta.tech/Resource"
---

# Resource(3)

shared object

## NAME

Resource - shared object

## SYNOPSIS

**#include \<InterViews/resource.h\>**

## DESCRIPTION

**Resource** is a class that provides a simple form of reference counting for shared objects. Every resource has a reference count that is initially set to zero and must be explicitly incremented through a call to Reference. A resource should not be deleted like other objects; instead, the static member function unref should be used to unreference the object.

When a resource is unreferenced, the reference count is decremented unless it is already zero.  If the count is zero, the object is destroyed.

## PUBLIC OPERATIONS

- **Resource()**

  Create a new resource object with its reference count set to zero.

- **void ref()**

  Increment the resource's reference count.

- **void unref()**

  Decrement the resource's reference count, if it is positive, and delete this if the count is zero.

- **static void ref(Resource\*)**

  If the resource is not nil, call ref on it. Otherwise do nothing.

- **static void unref(Resource\*)**

  If the resource is not nil, call unref on it. Otherwise do nothing.

- **void Reference()**

  This function is equivalent to ref and is provided solely for backward compatibility. It will be removed in a future version.

- **void Unreference()**

  This function is equivalent to unref and is provided solely for backward compatibility. It will be removed in a future version.

## FRIEND OPERATIONS

- **void Unref(Resource\*)**

  This function is equivalent to static unref and is provided solely for backward compatibility. It will be removed in a future version.

## BUGS

This scheme relies on manual referencing, which is more efficient, but also more dangerous.

When garbage collection is supported by the runtime system, resources will be unnecessary.
