---
description: "Learn more about: _com_error::_com_error"
title: "_com_error::_com_error"
ms.date: "11/04/2016"
f1_keywords: ["_com_error::_com_error"]
helpviewer_keywords: ["_com_error method [C++]"]
ms.assetid: 0a69e46c-caab-49ef-b091-eee401253ce6
---
# _com_error::_com_error
**Microsoft Specific**
Constructs a **_com_error** object.
## Syntax
```
_com_error(
HRESULT hr,
IErrorInfo* perrinfo = NULL,
bool fAddRef=false) throw( );
_com_error( const _com_error& that ) throw( );
```
#### Parameters
*hr*
HRESULT information.
*perrinfo*
`IErrorInfo` object.
*fAddRef*
The default causes the constructor to call AddRef on a non-null `IErrorInfo` interface. This provides for correct reference counting in the common case where ownership of the interface is passed into the **_com_error** object, such as:
```cpp
throw _com_error(hr, perrinfo);
```
If you do not want your code to transfer ownership to the **_com_error** object, and the `AddRef` is required to offset the `Release` in the **_com_error** destructor, construct the object as follows:
```cpp
_com_error err(hr, perrinfo, true);
```
*that*
An existing **_com_error** object.
## Remarks
The first constructor creates a new object given an HRESULT and optional `IErrorInfo` object. The second creates a copy of an existing **_com_error** object.
**END Microsoft Specific**
## See also
[_com_error Class](../cpp/com-error-class.md)