Interface Technology Basics  VST 3.6.14
SDK for developing VST Plug-in
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
OPtr< I > Class Template Reference

OPtr - "owning" smart pointer used for newly created FObjects. More...

#include <smartpointer.h>

+ Inheritance diagram for OPtr< I >:

Public Member Functions

 OPtr (I *p)
 
 OPtr (const IPtr< I > &p)
 
 OPtr (const OPtr< I > &p)
 
 OPtr ()
 
I * operator= (I *_ptr)
 
- Public Member Functions inherited from IPtr< I >
 IPtr (I *ptr, bool addRef=true)
 
 IPtr (const IPtr &)
 
 IPtr (const IPtr< I > &other)
 
 IPtr ()
 
 ~IPtr ()
 
I * operator= (I *ptr)
 
IPtroperator= (const IPtr &other)
 
IPtroperator= (const IPtr< I > &other)
 
 operator I * () const
 
I * operator-> () const
 
I * get () const
 
void reset (I *obj=nullptr)
 
I * take () SMTG_NOEXCEPT
 

Additional Inherited Members

- Static Public Member Functions inherited from IPtr< I >
static IPtr< I > adopt (I *obj) SMTG_NOEXCEPT
 
- Protected Attributes inherited from IPtr< I >
I * ptr
 

Detailed Description

template<class I>
class Steinberg::OPtr< I >

OPtr - "owning" smart pointer used for newly created FObjects.

FUnknown implementations are supposed to have a refCount of 1 right after creation. So using an IPtr on newly created objects would lead to a leak. Instead the OPtr can be used in this case.
Example:

OPtr<IPath> path = FHostCreate (IPath, hostClasses);
// no release is needed...

The assignment operator takes ownership of a new object and releases the old. So its safe to write:

OPtr<IPath> path = FHostCreate (IPath, hostClasses);
path = FHostCreate (IPath, hostClasses);
path = 0;

This is the difference to using an IPtr with addRef=false.

// DONT DO THIS:
IPtr<IPath> path (FHostCreate (IPath, hostClasses), false);
path = FHostCreate (IPath, hostClasses);
path = 0;

This will lead to a leak!

Constructor & Destructor Documentation

OPtr ( I *  p)
inline
OPtr ( const IPtr< I > &  p)
inline
OPtr ( const OPtr< I > &  p)
inline
OPtr ( )
inline

Member Function Documentation

I* operator= ( I *  _ptr)
inline
Empty

Copyright ©2019 Steinberg Media Technologies GmbH. All Rights Reserved. This documentation is under this license.