Skip to content

ipc_shared_ptr#

agnocast::ipc_shared_ptr<T>#

Smart pointer for zero-copy IPC message sharing between publishers and subscribers. ipc_shared_ptr manages the lifetime of messages allocated in shared memory. Publishers obtain an instance via Publisher::borrow_loaned_message(), fill in message fields, and transfer ownership with Publisher::publish(). Subscribers receive ipc_shared_ptr in their callbacks; the kernel-side reference is released when all copies are destroyed.

Example:

// Publisher side
auto msg = publisher->borrow_loaned_message();  // ipc_shared_ptr<MyMsg>
msg->data = 42;
publisher->publish(std::move(msg));
// msg is now invalidated — do NOT access it

// Subscriber side (callback receives ipc_shared_ptr<const MyMsg>)
void callback(const agnocast::ipc_shared_ptr<const MyMsg> & msg) {
  int value = msg->data;     // zero-copy read from shared memory
}  // kernel reference released when msg goes out of scope

ipc_shared_ptr() (constructor)#

ipc_shared_ptr::ipc_shared_ptr()

Construct an empty (null) ipc_shared_ptr.


ipc_shared_ptr() (constructor) [overload 2]#

ipc_shared_ptr::ipc_shared_ptr(agnocast::ipc_shared_ptr &r)

Copy constructor. Creates a new reference to the same message. The reference count is incremented atomically, so it is safe to copy from an instance that another thread also copies from. However, two threads must not copy-from and write-to the same instance concurrently.


operator=()#

agnocast::ipc_shared_ptr & agnocast::ipc_shared_ptr::operator=(agnocast::ipc_shared_ptr &r)

Copy assignment. Releases the current reference and shares ownership with r . Same thread-safety guarantees as the copy constructor.

Returns Reference to *this.

ipc_shared_ptr() (constructor) [overload 3]#

ipc_shared_ptr::ipc_shared_ptr(agnocast::ipc_shared_ptr &&r) noexcept

Move constructor. Transfers ownership from r without changing the reference count. Not thread-safe: the caller must ensure no other thread accesses r concurrently.


operator=() [overload 2]#

agnocast::ipc_shared_ptr & agnocast::ipc_shared_ptr::operator=(agnocast::ipc_shared_ptr &&r) noexcept

Move assignment. Releases the current reference and takes ownership from r . Not thread-safe: the caller must ensure no other thread accesses r concurrently.

Returns Reference to *this.

ipc_shared_ptr() (constructor) [overload 4]#

ipc_shared_ptr::ipc_shared_ptr(agnocast::ipc_shared_ptr<U> &r)

Converting copy constructor (e.g., ipc_shared_ptr to ipc_shared_ptr). Enabled only when U is implicitly convertible to T.


ipc_shared_ptr() (constructor) [overload 5]#

ipc_shared_ptr::ipc_shared_ptr(agnocast::ipc_shared_ptr<U> &&r)

Converting move constructor (e.g., ipc_shared_ptr to ipc_shared_ptr). Enabled only when U is implicitly convertible to T.


operator=() [overload 3]#

agnocast::ipc_shared_ptr & agnocast::ipc_shared_ptr::operator=(agnocast::ipc_shared_ptr<U> &r)

Converting copy assignment (e.g., ipc_shared_ptr to ipc_shared_ptr). Enabled only when U is implicitly convertible to T .

Returns Reference to *this.

operator=() [overload 4]#

agnocast::ipc_shared_ptr & agnocast::ipc_shared_ptr::operator=(agnocast::ipc_shared_ptr<U> &&r)

Converting move assignment (e.g., ipc_shared_ptr to ipc_shared_ptr). Enabled only when U is implicitly convertible to T .

Returns Reference to *this.

operator*()#

T & agnocast::ipc_shared_ptr::operator*() noexcept

Dereference the managed message. Calls std::terminate() if the pointer has been invalidated by publish().

Returns Reference to the managed message.

operator->()#

T * agnocast::ipc_shared_ptr::operator->() noexcept

Access a member of the managed message. Calls std::terminate() if the pointer has been invalidated by publish().

Returns Pointer to the managed message.

operator bool()#

agnocast::ipc_shared_ptr::operator bool() noexcept

Return true if the pointer is non-null and has not been invalidated.

Returns True if non-null and not invalidated.

get()#

T * ipc_shared_ptr::get() noexcept

Return the raw pointer, or nullptr if empty or invalidated.

Returns Raw pointer, or nullptr if empty or invalidated.

reset()#

void ipc_shared_ptr::reset()

Release ownership of the managed message. If this is the last reference: on the subscriber side, notifies the kernel module that the message can be reclaimed; on the publisher side (if unpublished), frees the allocated memory.