Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: downloads/boost_1_34_1/libs/serialization/doc/shared_ptr2.html @ 29

Last change on this file since 29 was 29, checked in by landauf, 16 years ago

updated boost from 1_33_1 to 1_34_1

File size: 3.9 KB
Line 
1<!doctype HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
2<html>
3<!--
4(C) Copyright 2002-4 Robert Ramey - http://www.rrsd.com .
5Use, modification and distribution is subject to the Boost Software
6License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
7http://www.boost.org/LICENSE_1_0.txt)
8-->
9<head>
10<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
11<link rel="stylesheet" type="text/css" href="../../../boost.css">
12<link rel="stylesheet" type="text/css" href="style.css">
13<title>Template serialization - shared_ptr</title>
14</head>
15<body link="#0000ff" vlink="#800080">
16<table border="0" cellpadding="7" cellspacing="0" width="100%" summary="header">
17  <tr> 
18    <td valign="top" width="300"> 
19      <h3><a href="../../../index.htm"><img height="86" width="277" alt="C++ Boost" src="../../../boost.png" border="0"></a></h3>
20    </td>
21    <td valign="top"> 
22      <h1 align="center">Serialization</h1>
23      <h2 align="center"><code style="white-space: normal">shared_ptr&lt;class T&gt;</code> Revisted</h2>
24    </td>
25  </tr>
26</table>
27<hr>
28The previously described serialization of <code style="white-space: normal">shared_ptr</code>
29illustrates the straightforward way of serializing a moderately complicated class structure.
30Unfortunately, this way of doing it suffered from some undesirable features
31<ul>
32  <li>It was dependent on the Boost implementation of <code style="white-space: normal">shared_ptr</code>.
33  The <code style="white-space: normal">shared_ptr</code> interface has been included
34  in <code style="white-space: normal">std::tr1</code> and may someday be included in the standard
35  C++ library. An implementation which depends only on the public interface can be guarenteed to
36  function with any other future implementation of <code style="white-space: normal">shared_ptr</code>.
37  <li>It required extra macros for export.
38</ul>
39
40<pre><code>
41template&lt;class Archive, class T&gt;
42inline void save(
43    Archive & ar,
44    const boost::shared_ptr&ltT&gt; &t,
45    const unsigned int /* file_version */
46){
47    const T * t_ptr = t.get();
48    // just seriailize the underlying raw pointer
49    ar &lt;&lt: boost::serialization::make_nvp("px", t_ptr);
50}
51
52template&lt;class Archive, class T&gt
53inline void load(
54    Archive & ar,
55    boost::shared_ptr&lt;T&gt; &t,
56    const unsigned int file_version
57){
58    T* r;
59    // recover the underlying raw poiter
60    ar >> boost::serialization::make_nvp("px", r);
61
62    // To Do - match up with other shared pointers which
63    // use this same raw pointer.
64    ...
65}
66</code></pre>
67
68In priniciple this is very much simpler than the original implementation.  Completion of
69this code requires:
70
71<ol>
72  <li>Filling in the "To Do".  This required making an extra map for
73  <code style="white-space: normal">shared_ptr</code> instances.
74  <li>A method for identifing pointers to the same objects from pointers to their base classes.
75  <li>Backward compatibility with pointers serialized by the previous method.  This exploits
76  the serialization class versioning.
77  <li>Proper handling of <code style="white-space: normal">weak_ptr</code>.
78</ol>
79
80The result of this effort can be found in
81<a target = serialization_shared_ptr href="../../../boost/serialization/shared_ptr.hpp">
82<code style="white-space: normal">boost::serialization::shared_ptr.hpp</code>
83</a>
84<p>
85Note that if your code needs to read archives created under boost version 1.32, you will
86have to include the following
87
88<pre><code>
89#include &lt;boost/serialization/shared_ptr_132.hpp&gt;
90#include &lt;boost/serialization/shared_ptr.hpp&gt;
91</code></pre>
92rather than just
93<pre><code>
94#include &lt;boost/serialization/shared_ptr.hpp&gt;
95</code></pre>
96
97<hr>
98<p><i>&copy; Copyright <a href="http://www.rrsd.com">Robert Ramey</a> 2002-2004.
99Distributed under the Boost Software License, Version 1.0. (See
100accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
101</i></p>
102</body>
103</html>
Note: See TracBrowser for help on using the repository browser.