]> git.mxchange.org Git - simgear.git/blobdiff - simgear/structure/SGSharedPtr.hxx
Fix PagedLOD for random objects.
[simgear.git] / simgear / structure / SGSharedPtr.hxx
index aedd846353a2764cccb3513d6e9839b092dce016..3afcfc9103bf69d6eff446c039899d74f07c1362 100644 (file)
@@ -1,22 +1,21 @@
-/* -*-c++-*-
- *
- * Copyright (C) 2005-2012 Mathias Froehlich 
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
- *
- */
+///@file
+/// Pointer proxy doing reference counting.
+//
+// Copyright (C) 2005-2012 Mathias Froehlich
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
 
 #ifndef SGSharedPtr_HXX
 #define SGSharedPtr_HXX
 #include "SGReferenced.hxx"
 #include <algorithm>
 
+template<typename T>
+class SGWeakPtr;
+
 /// This class is a pointer proxy doing reference counting on the object
 /// it is pointing to.
 /// The SGSharedPtr class handles reference counting and possible
 /// destruction if no nore references are in use automatically.
-/// Classes derived from @SGReferenced can be handled with SGSharedPtr.
+/// Classes derived from SGReferenced can be handled with SGSharedPtr.
 /// Once you have a SGSharedPtr available you can use it just like
 /// a usual pointer with the exception that you don't need to delete it.
 /// Such a reference is initialized by zero if not initialized with a
@@ -43,9 +45,6 @@
 /// pretty much the same than this one at
 /// http://dburns.dhs.org/OSG/Articles/RefPointers/RefPointers.html
 
-template<typename T>
-class SGWeakPtr;
-
 template<typename T>
 class SGSharedPtr {
 public:
@@ -60,6 +59,9 @@ public:
   template<typename U>
   SGSharedPtr(const SGSharedPtr<U>& p) : _ptr(p.get())
   { get(_ptr); }
+  template<typename U>
+  explicit SGSharedPtr(const SGWeakPtr<U>& p): _ptr(0)
+  { reset(p.lock().get()); }
   ~SGSharedPtr(void)
   { reset(); }