A<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>http://cppe.ru/index.php?action=history&amp;feed=atom&amp;title=C%2B%2B_Tutorial%2FSTL_Introduction%2FMemory</id>
		<title>C++ Tutorial/STL Introduction/Memory - История изменений</title>
		<link rel="self" type="application/atom+xml" href="http://cppe.ru/index.php?action=history&amp;feed=atom&amp;title=C%2B%2B_Tutorial%2FSTL_Introduction%2FMemory"/>
		<link rel="alternate" type="text/html" href="http://cppe.ru/index.php?title=C%2B%2B_Tutorial/STL_Introduction/Memory&amp;action=history"/>
		<updated>2026-04-08T17:44:41Z</updated>
		<subtitle>История изменений этой страницы в вики</subtitle>
		<generator>MediaWiki 1.30.0</generator>

	<entry>
		<id>http://cppe.ru/index.php?title=C%2B%2B_Tutorial/STL_Introduction/Memory&amp;diff=2505&amp;oldid=prev</id>
		<title> в 14:21, 25 мая 2010</title>
		<link rel="alternate" type="text/html" href="http://cppe.ru/index.php?title=C%2B%2B_Tutorial/STL_Introduction/Memory&amp;diff=2505&amp;oldid=prev"/>
				<updated>2010-05-25T14:21:17Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr style=&quot;vertical-align: top;&quot; lang=&quot;ru&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;← Предыдущая&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;Версия 14:21, 25 мая 2010&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; style=&quot;text-align: center;&quot; lang=&quot;ru&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(нет различий)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
			</entry>

	<entry>
		<id>http://cppe.ru/index.php?title=C%2B%2B_Tutorial/STL_Introduction/Memory&amp;diff=2506&amp;oldid=prev</id>
		<title>Admin: 1 версия:&amp;#32;Импорт контента...</title>
		<link rel="alternate" type="text/html" href="http://cppe.ru/index.php?title=C%2B%2B_Tutorial/STL_Introduction/Memory&amp;diff=2506&amp;oldid=prev"/>
				<updated>2010-05-25T10:29:52Z</updated>
		
		<summary type="html">&lt;p&gt;1 версия: Импорт контента...&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;==Memory allocator==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;/* The following code example is taken from the book&lt;br /&gt;
 * &amp;quot;The C++ Standard Library - A Tutorial and Reference&amp;quot;&lt;br /&gt;
 * by Nicolai M. Josuttis, Addison-Wesley, 1999&lt;br /&gt;
 *&lt;br /&gt;
 * (C) Copyright Nicolai M. Josuttis 1999.&lt;br /&gt;
 * Permission to copy, use, modify, sell and distribute this software&lt;br /&gt;
 * is granted provided this copyright notice appears in all copies.&lt;br /&gt;
 * This software is provided &amp;quot;as is&amp;quot; without express or implied&lt;br /&gt;
 * warranty, and with no claim as to its suitability for any purpose.&lt;br /&gt;
 */&lt;br /&gt;
#include &amp;lt;vector&amp;gt;&lt;br /&gt;
#include &amp;lt;limits&amp;gt;&lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
namespace MyLib {&lt;br /&gt;
   template &amp;lt;class T&amp;gt;&lt;br /&gt;
   class MyAlloc {&lt;br /&gt;
     public:&lt;br /&gt;
       // type definitions&lt;br /&gt;
       typedef T        value_type;&lt;br /&gt;
       typedef T*       pointer;&lt;br /&gt;
       typedef const T* const_pointer;&lt;br /&gt;
       typedef T&amp;amp;       reference;&lt;br /&gt;
       typedef const T&amp;amp; const_reference;&lt;br /&gt;
       typedef std::size_t    size_type;&lt;br /&gt;
       typedef std::ptrdiff_t difference_type;&lt;br /&gt;
       // rebind allocator to type U&lt;br /&gt;
       template &amp;lt;class U&amp;gt;&lt;br /&gt;
       struct rebind {&lt;br /&gt;
           typedef MyAlloc&amp;lt;U&amp;gt; other;&lt;br /&gt;
       };&lt;br /&gt;
       // return address of values&lt;br /&gt;
       pointer address (reference value) const {&lt;br /&gt;
           return &amp;amp;value;&lt;br /&gt;
       }&lt;br /&gt;
       const_pointer address (const_reference value) const {&lt;br /&gt;
           return &amp;amp;value;&lt;br /&gt;
       }&lt;br /&gt;
       /* constructors and destructor&lt;br /&gt;
        * - nothing to do because the allocator has no state&lt;br /&gt;
        */&lt;br /&gt;
       MyAlloc() throw() {&lt;br /&gt;
       }&lt;br /&gt;
       MyAlloc(const MyAlloc&amp;amp;) throw() {&lt;br /&gt;
       }&lt;br /&gt;
       template &amp;lt;class U&amp;gt;&lt;br /&gt;
         MyAlloc (const MyAlloc&amp;lt;U&amp;gt;&amp;amp;) throw() {&lt;br /&gt;
       }&lt;br /&gt;
       ~MyAlloc() throw() {&lt;br /&gt;
       }&lt;br /&gt;
       // return maximum number of elements that can be allocated&lt;br /&gt;
       size_type max_size () const throw() {&lt;br /&gt;
           return std::numeric_limits&amp;lt;std::size_t&amp;gt;::max() / sizeof(T);&lt;br /&gt;
       }&lt;br /&gt;
       // allocate but don&amp;quot;t initialize num elements of type T&lt;br /&gt;
       pointer allocate (size_type num, const void* = 0) {&lt;br /&gt;
           // print message and allocate memory with global new&lt;br /&gt;
           std::cerr &amp;lt;&amp;lt; &amp;quot;allocate &amp;quot; &amp;lt;&amp;lt; num &amp;lt;&amp;lt; &amp;quot; element(s)&amp;quot;&lt;br /&gt;
                     &amp;lt;&amp;lt; &amp;quot; of size &amp;quot; &amp;lt;&amp;lt; sizeof(T) &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
           pointer ret = (pointer)(::operator new(num*sizeof(T)));&lt;br /&gt;
           std::cerr &amp;lt;&amp;lt; &amp;quot; allocated at: &amp;quot; &amp;lt;&amp;lt; (void*)ret &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
           return ret;&lt;br /&gt;
       }&lt;br /&gt;
       // initialize elements of allocated storage p with value value&lt;br /&gt;
       void construct (pointer p, const T&amp;amp; value) {&lt;br /&gt;
           // initialize memory with placement new&lt;br /&gt;
           new((void*)p)T(value);&lt;br /&gt;
       }&lt;br /&gt;
       // destroy elements of initialized storage p&lt;br /&gt;
       void destroy (pointer p) {&lt;br /&gt;
           // destroy objects by calling their destructor&lt;br /&gt;
           p-&amp;gt;~T();&lt;br /&gt;
       }&lt;br /&gt;
       // deallocate storage p of deleted elements&lt;br /&gt;
       void deallocate (pointer p, size_type num) {&lt;br /&gt;
           // print message and deallocate memory with global delete&lt;br /&gt;
           std::cerr &amp;lt;&amp;lt; &amp;quot;deallocate &amp;quot; &amp;lt;&amp;lt; num &amp;lt;&amp;lt; &amp;quot; element(s)&amp;quot;&lt;br /&gt;
                     &amp;lt;&amp;lt; &amp;quot; of size &amp;quot; &amp;lt;&amp;lt; sizeof(T)&lt;br /&gt;
                     &amp;lt;&amp;lt; &amp;quot; at: &amp;quot; &amp;lt;&amp;lt; (void*)p &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
           ::operator delete((void*)p);&lt;br /&gt;
       }&lt;br /&gt;
   };&lt;br /&gt;
   // return that all specializations of this allocator are interchangeable&lt;br /&gt;
   template &amp;lt;class T1, class T2&amp;gt;&lt;br /&gt;
   bool operator== (const MyAlloc&amp;lt;T1&amp;gt;&amp;amp;,&lt;br /&gt;
                    const MyAlloc&amp;lt;T2&amp;gt;&amp;amp;) throw() {&lt;br /&gt;
       return true;&lt;br /&gt;
   }&lt;br /&gt;
   template &amp;lt;class T1, class T2&amp;gt;&lt;br /&gt;
   bool operator!= (const MyAlloc&amp;lt;T1&amp;gt;&amp;amp;,&lt;br /&gt;
                    const MyAlloc&amp;lt;T2&amp;gt;&amp;amp;) throw() {&lt;br /&gt;
       return false;&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int main()&lt;br /&gt;
{&lt;br /&gt;
    // create a vector, using MyAlloc&amp;lt;&amp;gt; as allocator&lt;br /&gt;
    std::vector&amp;lt;int,MyLib::MyAlloc&amp;lt;int&amp;gt; &amp;gt; v;&lt;br /&gt;
    // insert elements&lt;br /&gt;
    // - causes reallocations&lt;br /&gt;
    v.push_back(42);&lt;br /&gt;
    v.push_back(56);&lt;br /&gt;
    v.push_back(11);&lt;br /&gt;
    v.push_back(22);&lt;br /&gt;
    v.push_back(33);&lt;br /&gt;
    v.push_back(44);&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;pre class=codeResult&amp;gt;allocate 1 element(s) of size 4&lt;br /&gt;
 allocated at: 0x3d2448&lt;br /&gt;
allocate 2 element(s) of size 4&lt;br /&gt;
 allocated at: 0x3d24b0&lt;br /&gt;
deallocate 1 element(s) of size 4 at: 0x3d2448&lt;br /&gt;
allocate 4 element(s) of size 4&lt;br /&gt;
 allocated at: 0x3d24c0&lt;br /&gt;
deallocate 2 element(s) of size 4 at: 0x3d24b0&lt;br /&gt;
allocate 8 element(s) of size 4&lt;br /&gt;
 allocated at: 0x3d24d8&lt;br /&gt;
deallocate 4 element(s) of size 4 at: 0x3d24c0&lt;br /&gt;
deallocate 8 element(s) of size 4 at: 0x3d24d8&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>	</entry>

	</feed>