--- description: "Learn more about: _com_ptr_t::_com_ptr_t" title: "_com_ptr_t::_com_ptr_t" ms.date: "11/04/2016" f1_keywords: ["_com_ptr_t::_com_ptr_t"] helpviewer_keywords: ["_com_ptr_t method [C++]"] ms.assetid: 0c00620a-28d2-4f60-ae4a-1696be36137e --- # _com_ptr_t::_com_ptr_t **Microsoft Specific** Constructs a **_com_ptr_t** object. ## Syntax ```cpp // Default constructor. // Constructs a NULL smart pointer. _com_ptr_t() throw(); // Constructs a NULL smart pointer. The NULL argument must be zero. _com_ptr_t( int null ); // Constructs a smart pointer as a copy of another instance of the // same smart pointer. AddRef is called to increment the reference // count for the encapsulated interface pointer. _com_ptr_t( const _com_ptr_t& cp ) throw(); // Move constructor (Visual Studio 2015 Update 3 and later) _com_ptr_t(_com_ptr_t&& cp) throw(); // Constructs a smart pointer from a raw interface pointer of this // smart pointer's type. If fAddRef is true, AddRef is called // to increment the reference count for the encapsulated // interface pointer. If fAddRef is false, this constructor // takes ownership of the raw interface pointer without calling AddRef. _com_ptr_t( Interface* pInterface, bool fAddRef ) throw(); // Construct pointer for a _variant_t object. // Constructs a smart pointer from a _variant_t object. The // encapsulated VARIANT must be of type VT_DISPATCH or VT_UNKNOWN, or // it can be converted into one of these two types. If QueryInterface // fails with an E_NOINTERFACE error, a NULL smart pointer is // constructed. _com_ptr_t( const _variant_t& varSrc ); // Constructs a smart pointer given the CLSID of a coclass. This // function calls CoCreateInstance, by the member function // CreateInstance, to create a new COM object and then queries for // this smart pointer's interface type. If QueryInterface fails with // an E_NOINTERFACE error, a NULL smart pointer is constructed. explicit _com_ptr_t( const CLSID& clsid, IUnknown* pOuter = NULL, DWORD dwClsContext = CLSCTX_ALL ); // Calls CoCreateClass with provided CLSID retrieved from string. explicit _com_ptr_t( LPCWSTR str, IUnknown* pOuter = NULL, DWORD dwClsContext = CLSCTX_ALL ); // Constructs a smart pointer given a multibyte character string that // holds either a CLSID (starting with "{") or a ProgID. This function // calls CoCreateInstance, by the member function CreateInstance, to // create a new COM object and then queries for this smart pointer's // interface type. If QueryInterface fails with an E_NOINTERFACE error, // a NULL smart pointer is constructed. explicit _com_ptr_t( LPCSTR str, IUnknown* pOuter = NULL, DWORD dwClsContext = CLSCTX_ALL ); // Saves the interface. template<> _com_ptr_t( Interface* pInterface ) throw(); // Make sure correct ctor is called template<> _com_ptr_t( LPSTR str ); // Make sure correct ctor is called template<> _com_ptr_t( LPWSTR str ); // Constructs a smart pointer from a different smart pointer type or // from a different raw interface pointer. QueryInterface is called to // find an interface pointer of this smart pointer's type. If // QueryInterface fails with an E_NOINTERFACE error, a NULL smart // pointer is constructed. template _com_ptr_t( const _com_ptr_t<_OtherIID>& p ); // Constructs a smart-pointer from any IUnknown-based interface pointer. template _com_ptr_t( _InterfaceType* p ); // Disable conversion using _com_ptr_t* specialization of // template _com_ptr_t(_InterfaceType* p) template<> explicit _com_ptr_t( _com_ptr_t* p ); ``` ### Parameters *pInterface*
A raw interface pointer. *fAddRef*
If **`true`**, `AddRef` is called to increment the reference count of the encapsulated interface pointer. *cp*
A **_com_ptr_t** object. *p*
A raw interface pointer, its type being different from the smart pointer type of this **_com_ptr_t** object. *varSrc*
A `_variant_t` object. *clsid*
The `CLSID` of a coclass. *dwClsContext*
Context for running executable code. *lpcStr*
A multibyte string that holds either a `CLSID` (starting with "**{**") or a `ProgID`. *pOuter*
The outer unknown for [aggregation](/windows/win32/com/aggregation). **END Microsoft Specific** ## See also [_com_ptr_t Class](../cpp/com-ptr-t-class.md)