/usr/include/vtk-7.1/vtkNew.h is in libvtk7-dev 7.1.1+dfsg1-2.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
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 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 | /*=========================================================================
Program: Visualization Toolkit
Module: vtkNew.h
Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
All rights reserved.
See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
This software is distributed WITHOUT ANY WARRANTY; without even
the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
PURPOSE. See the above copyright notice for more information.
=========================================================================*/
/**
* @class vtkNew
* @brief Allocate and hold a VTK object.
*
* vtkNew is a class template that on construction allocates and
* initializes an instance of its template argument using T::New().
* It assumes ownership of one reference during its lifetime, and calls
* T->Delete() on destruction.
*
* Automatic casting is intentionally unavailable, calling GetPointer() will
* return a raw pointer. Users of this method should ensure that they do not
* return this pointer if the vtkNew will go out of scope without
* incrementing its reference count using vtkSmartPointer or similar.
*
* \code
* vtkNew<vtkClass> a;
* a->SomeMethod();
*
* vtkSmartPointer<vtkClass> b = a.GetPointer();
* b->SomeOtherMethod();
* \endcode
*
* It should be noted that vtkNew is not a drop in replacement for
* vtkSmartPointer as it is not implicitly cast to a pointer in functions
* requiring a pointer. The GetPointer() method must be used, for example,
*
* \code
* vtkNew<vtkRenderer> ren;
* vtkNew<vtkRenderWindow> renWin;
* renWin->AddRenderer(ren.GetPointer());
* vtkNew<vtkRenderWindowInteractor> iren;
* iren->SetRenderWindow(renWin.GetPointer());
* \endcode
*
* @sa
* vtkSmartPointer vtkWeakPointer
*/
#ifndef vtkNew_h
#define vtkNew_h
#include "vtkIOStream.h"
class vtkObjectBase;
template <class T>
class vtkNew
{
/**
* Compile time checking that the class is derived from vtkObjectBase.
*/
void CheckObjectBase(vtkObjectBase*) {}
public:
/**
* Create a new T on construction.
*/
vtkNew() : Object(T::New())
{
this->CheckObjectBase(this->Object);
}
//@{
/**
* Deletes reference to instance of T on destruction.
*/
~vtkNew()
{
T* obj = this->Object;
if (obj)
{
this->Object = 0;
obj->Delete();
}
}
//@}
/**
* Enable pointer-like dereference syntax. Returns a pointer to the contained
* object.
*/
T* operator->() const
{
return this->Object;
}
//@{
/**
* Get a raw pointer to the contained object. When using this function be
* careful that the reference count does not drop to 0 when using the pointer
* returned. This will happen when the vtkNew object goes out of
* scope for example.
*/
T* GetPointer() const
{
return this->Object;
}
T* Get() const
{
return this->Object;
}
//@}
private:
vtkNew(vtkNew<T> const&) VTK_DELETE_FUNCTION;
void operator=(vtkNew<T> const&) VTK_DELETE_FUNCTION;
T* Object;
};
/**
* Streaming operator to print vtkNew like regular pointers.
*/
template <class T>
inline ostream& operator << (ostream& os, const vtkNew<T>& p)
{
return os << p.GetPointer();
}
#endif
// VTK-HeaderTest-Exclude: vtkNew.h
|