<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
lang="en" dir="ltr">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>
new [C++ Reference]
</title>
<meta name="generator" content="DokuWiki Release 2009-12-25c "Lemming"" />
<meta name="robots" content="index,follow" />
<meta name="date" content="2009-06-17T17:56:12-0700" />
<meta name="keywords" content="keywords,new" />
<link rel="search" type="application/opensearchdescription+xml" href="/wiki/lib/exe/opensearch.php" title="C++ Reference" />
<link rel="start" href="/wiki/" />
<link rel="contents" href="/wiki/keywords/new?do=index" title="Index" />
<link rel="alternate" type="application/rss+xml" title="Recent Changes" href="/wiki/feed.php" />
<link rel="alternate" type="application/rss+xml" title="Current Namespace" href="/wiki/feed.php?mode=list&ns=keywords" />
<link rel="edit" title="Edit this page" href="/wiki/keywords/new?do=edit" />
<link rel="alternate" type="text/html" title="Plain HTML" href="/wiki/_export/xhtml/keywords/new" />
<link rel="alternate" type="text/plain" title="Wiki Markup" href="/wiki/_export/raw/keywords/new" />
<link rel="stylesheet" media="all" type="text/css" href="/wiki/lib/exe/css.php?s=all&t=custom1&tseed=1272971091" />
<link rel="stylesheet" media="screen" type="text/css" href="/wiki/lib/exe/css.php?t=custom1&tseed=1272971091" />
<link rel="stylesheet" media="print" type="text/css" href="/wiki/lib/exe/css.php?s=print&t=custom1&tseed=1272971091" />
<script type="text/javascript" charset="utf-8" ><!--//--><![CDATA[//><!--
var NS='keywords';var JSINFO = {"id":"keywords:new","namespace":"keywords"};
//--><!]]></script>
<script type="text/javascript" charset="utf-8" src="/wiki/lib/exe/js.php?tseed=1272971091" ></script>
<link rel="shortcut icon" href="/wiki/lib/tpl/custom1/images/favicon.png" />
</head>
<body>
<div class="dokuwiki">
<div class="stylehead">
<div class="breadcrumbs">
<span class="bchead">You are here: </span><a href="../start.html" title="start">C++ Reference</a> » <a href="../keywords/start.html" title="keywords:start">C++ Keywords</a> » <a href="../keywords/new.html" title="keywords:new">new</a> </div>
</div>
<div class="page">
</script>
<script type="text/javascript">
_uacct = "UA-2828341-1";
urchinTracker();
</script>
<!-- wikipage start -->
<h2><a name="new" id="new">new</a></h2>
<div class="level2">
<p>
Syntax:
</p>
<pre class="c code c++" style="font-family:monospace;"> pointer <span class="sy0">=</span> new type<span class="sy0">;</span>
pointer <span class="sy0">=</span> new type<span class="br0">(</span> initializer <span class="br0">)</span><span class="sy0">;</span>
pointer <span class="sy0">=</span> new type<span class="br0">[</span>size<span class="br0">]</span><span class="sy0">;</span>
pointer <span class="sy0">=</span> new<span class="br0">(</span> arg<span class="sy0">-</span>list <span class="br0">)</span> type...</pre>
<p>
The new operator (valid only in C++) allocates a new chunk of memory to hold a
variable of type type and returns a pointer to that memory. An optional
initializer can be used to initialize the memory (or, when type is a class,
to provide arguments to the constructor).
</p>
<p>
Allocating arrays can be
accomplished by providing a size parameter in brackets (note that in this case
no initializer can be given, so the type must be default-constructible).
</p>
<p>
The optional arg-list parameter can be used with any of the other formats to
pass a variable number of arguments to an overloaded version of new().
Perhaps the most useful argument is nothrow which does not throw an exception when
there is no available memory. For example:
</p>
<pre class="c code c++" style="font-family:monospace;"> Foo <span class="sy0">*</span>foo<span class="sy0">;</span> <span class="co1">// Foo is a class, and foo is a pointer to an object of the Foo class</span>
foo <span class="sy0">=</span> new<span class="br0">(</span>nothrow<span class="br0">)</span> Foo<span class="br0">(</span><span class="br0">)</span><span class="sy0">;</span>
assert<span class="br0">(</span> foo <span class="br0">)</span><span class="sy0">;</span></pre>
<p>
Alternately, the new() function can be overloaded for
a class and then passed arbitrary arguments. For example:
</p>
<pre class="c code c++" style="font-family:monospace;"> class Base <span class="br0">{</span>
public<span class="sy0">:</span>
Base<span class="br0">(</span><span class="br0">)</span> <span class="br0">{</span> <span class="br0">}</span>
<span class="kw4">void</span> <span class="sy0">*</span>operator new<span class="br0">(</span> size_t size<span class="sy0">,</span> <span class="kw4">string</span> str <span class="br0">)</span> <span class="br0">{</span>
<a href="http://www.opengroup.org/onlinepubs/009695399/functions/cout.html"><span class="kw3">cout</span></a> <span class="sy0"><<</span> <span class="st0">"Logging an allocation of "</span> <span class="sy0"><<</span> size <span class="sy0"><<</span> <span class="st0">" bytes for new object'"</span> <span class="sy0"><<</span> str <span class="sy0"><<</span> <span class="st0">"'"</span> <span class="sy0"><<</span> endl<span class="sy0">;</span>
<span class="kw1">return</span> malloc<span class="br0">(</span> size <span class="br0">)</span><span class="sy0">;</span>
<span class="br0">}</span>
<span class="kw4">int</span> var<span class="sy0">;</span>
<span class="kw4">double</span> var2<span class="sy0">;</span>
<span class="br0">}</span><span class="sy0">;</span>
...
<span class="me1">Base</span><span class="sy0">*</span> b <span class="sy0">=</span> new <span class="br0">(</span><span class="st0">"Base instance 1"</span><span class="br0">)</span> Base<span class="sy0">;</span></pre>
<p>
If an int is 4 bytes and a double is 8 bytes, the above code generates the
following output when run:
</p>
<pre class="c code c++" style="font-family:monospace;"> Logging an allocation of 12 bytes <span class="kw1">for</span> new object <span class="st0">'Base instance 1'</span></pre>
<p>
Remember to free any memory allocated with new with the <a href="../keywords/delete.html" class="wikilink1" title="keywords:delete">delete</a> operator. If you use the array version of the new operator, you will need to use the array version of the delete operator.
</p>
<p>
Related Topics: <a href="../keywords/delete.html" class="wikilink1" title="keywords:delete">delete</a>, <a href="../c/mem/free.html" class="wikilink1" title="c:mem:free">free</a>, <a href="../c/mem/malloc.html" class="wikilink1" title="c:mem:malloc">malloc</a>
</p>
</div>
<!-- wikipage stop -->
</div>
<div class="clearer"> </div>
<div class="stylefoot">
<div class="meta">
<div class="user">
</div>
<!--
<div class="doc">
keywords/new.txt · Last modified: 06/17/2009 17:56 by 24.82.151.145 </div>
-->
</div>
</div></div></body>
</html>