File: scoped_array.htm

package info (click to toggle)
boost 1.34.1-14
  • links: PTS
  • area: main
  • in suites: lenny
  • size: 116,412 kB
  • ctags: 259,566
  • sloc: cpp: 642,395; xml: 56,450; python: 17,612; ansic: 14,520; sh: 2,265; yacc: 858; perl: 481; makefile: 478; lex: 94; sql: 74; csh: 6
file content (117 lines) | stat: -rw-r--r-- 6,870 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
	<head>
		<title>scoped_array</title>
		<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
	</head>
	<body bgcolor="#ffffff" text="#000000">
		<h1><A href="../../index.htm"><img src="../../boost.png" alt="boost.png (6897 bytes)" align="middle" width="277" height="86"
					border="0"></A>scoped_array class template</h1>
		<p>The <b>scoped_array</b> class template stores a pointer to a dynamically 
			allocated array. (Dynamically allocated arrays are allocated with the C++ <b>new[]</b>
			expression.) The array pointed to is guaranteed to be deleted, either on 
			destruction of the <b>scoped_array</b>, or via an explicit <b>reset</b>.</p>
		<p>The <b>scoped_array</b> template is a simple solution for simple needs. It 
			supplies a basic "resource acquisition is initialization" facility, without 
			shared-ownership or transfer-of-ownership semantics. Both its name and 
			enforcement of semantics (by being <a href="../utility/utility.htm#Class_noncopyable">
				noncopyable</a>) signal its intent to retain ownership solely within the 
			current scope. Because it is <a href="../utility/utility.htm#Class_noncopyable">noncopyable</a>, 
			it is safer than <b>shared_array</b> for pointers which should not be copied.</p>
		<p>Because <b>scoped_array</b> is so simple, in its usual implementation every 
			operation is as fast as a built-in array pointer and it has no more space 
			overhead that a built-in array pointer.</p>
		<p>It cannot be used in C++ standard library containers. See <a href="shared_array.htm">
				<b>shared_array</b></a> if <b>scoped_array</b> does not meet your needs.</p>
		<p>It cannot correctly hold a pointer to a single object. See <a href="scoped_ptr.htm"><b>scoped_ptr</b></a>
			for that usage.</p>
		<p>A <b>std::vector</b> is an alternative to a <b>scoped_array</b> that is a bit 
			heavier duty but far more flexible. A <b>boost::array</b> is an alternative 
			that does not use dynamic allocation.</p>
		<p>The class template is parameterized on <b>T</b>, the type of the object pointed 
			to. <b>T</b> must meet the smart pointer <a href="smart_ptr.htm#common_requirements">
				common requirements</a>.</p>
		<h2>Synopsis</h2>
		<pre>namespace boost {

  template&lt;class T&gt; class scoped_array : <a href="../utility/utility.htm#Class_noncopyable">noncopyable</a> {

    public:
      typedef T <a href="#element_type">element_type</a>;

      explicit <a href="#ctor">scoped_array</a>(T * p = 0); // never throws
      <a href="#destructor">~scoped_array</a>(); // never throws

      void <a href="#reset">reset</a>(T * p = 0); // never throws

      T &amp; <a href="#operator[]">operator[]</a>(std::ptrdiff_t i) const; // never throws
      T * <a href="#get">get</a>() const; // never throws
     
      operator <A href="#conversions" ><i>unspecified-bool-type</i></A>() const; // never throws

      void <a href="#swap">swap</a>(scoped_array &amp; b); // never throws
  };

  template&lt;class T&gt; void <a href="#free-swap">swap</a>(scoped_array&lt;T&gt; &amp; a, scoped_array&lt;T&gt; &amp; b); // never throws

}</pre>
		<h2>Members</h2>
		<h3>
			<a name="element_type">element_type</a></h3>
		<pre>typedef T element_type;</pre>
		<p>Provides the type of the stored pointer.</p>
		<h3><a name="ctor">constructors</a></h3>
		<pre>explicit scoped_array(T * p = 0); // never throws</pre>
		<p>Constructs a <b>scoped_array</b>, storing a copy of <b>p</b>, which must have 
			been allocated via a C++ <b>new</b>[] expression or be 0. <b>T</b> is not 
			required be a complete type. See the smart pointer <a href="smart_ptr.htm#common_requirements">
				common requirements</a>.</p>
		<h3><a name="destructor">destructor</a></h3>
		<pre>~scoped_array(); // never throws</pre>
		<p>Deletes the array pointed to by the stored pointer. Note that <b>delete[]</b> on 
			a pointer with a value of 0 is harmless. The guarantee that this does not throw 
			exceptions depends on the requirement that the deleted array's objects' 
			destructors do not throw exceptions. See the smart pointer <a href="smart_ptr.htm#common_requirements">
				common requirements</a>.</p>
		<h3><a name="reset">reset</a></h3>
		<pre>void reset(T * p = 0); // never throws</pre>
		<p>
			Deletes the array pointed to by the stored pointer and then stores a copy of p, 
			which must have been allocated via a C++ <b>new[]</b> expression or be 0. The 
			guarantee that this does not throw exceptions depends on the requirement that 
			the deleted array's objects' destructors do not throw exceptions. See the smart 
			pointer <a href="smart_ptr.htm#common_requirements">common requirements</a>.</p>
		<h3><a name="operator[]">subscripting</a></h3>
		<pre>T &amp; operator[](std::ptrdiff_t i) const; // never throws</pre>
		<p>Returns a reference to element <b>i</b> of the array pointed to by the stored 
			pointer. Behavior is undefined and almost certainly undesirable if the stored 
			pointer is 0, or if <b>i</b> is less than 0 or is greater than or equal to the 
			number of elements in the array.</p>
		<h3><a name="get">get</a></h3>
		<pre>T * get() const; // never throws</pre>
		<p>Returns the stored pointer. <b>T</b> need not be a complete type. See the smart 
			pointer <a href="smart_ptr.htm#common_requirements">common requirements</a>.</p>
		<h3><a name="conversions">conversions</a></h3>
		<pre>operator <i>unspecified-bool-type</i> () const; // never throws</pre>
		<p>Returns an unspecified value that, when used in boolean contexts, is equivalent 
			to <code>get() != 0</code>.</p>
		<h3><a name="swap">swap</a></h3>
		<pre>void swap(scoped_array &amp; b); // never throws</pre>
		<p>Exchanges the contents of the two smart pointers. <b>T</b> need not be a 
			complete type. See the smart pointer <a href="smart_ptr.htm#common_requirements">common 
				requirements</a>.</p>
		<h2><a name="functions">Free Functions</a></h2>
		<h3><a name="free-swap">swap</a></h3>
		<pre>template&lt;class T&gt; void swap(scoped_array&lt;T&gt; &amp; a, scoped_array&lt;T&gt; &amp; b); // never throws</pre>
		<p>Equivalent to <b>a.swap(b)</b>. Matches the interface of <b>std::swap</b>. 
			Provided as an aid to generic programming.</p>
		<hr>
		<p>Revised <!--webbot bot="Timestamp" S-Type="EDITED" S-Format="%d %B %Y" startspan--> 
			09 January 2003<!--webbot bot="Timestamp" endspan i-checksum="32310"--></p>
		<p>Copyright 1999 Greg Colvin and Beman Dawes. Copyright 2002 Darin Adler. 
			Copyright 2002-2005 Peter Dimov. Permission to copy, use, modify, sell and 
			distribute this document is granted provided this copyright notice appears in 
			all copies. This document is provided "as is" without express or implied 
			warranty, and with no claim as to its suitability for any purpose.</p>
	</body>
</html>