changeset 11506:964b7fd379f1

more constructor/destructor fixes
author John W. Eaton <jwe@octave.org>
date Thu, 13 Jan 2011 05:42:24 -0500
parents 9a308e96194e
children c3ad80f4ce36
files liboctave/ChangeLog liboctave/file-stat.h liboctave/oct-locbuf.h
diffstat 3 files changed, 48 insertions(+), 14 deletions(-) [+]
line wrap: on
line diff
--- a/liboctave/ChangeLog	Thu Jan 13 03:57:11 2011 -0500
+++ b/liboctave/ChangeLog	Thu Jan 13 05:42:24 2011 -0500
@@ -1,3 +1,13 @@
+2011-01-13  John W. Eaton  <jwe@octave.org>
+
+	* oct-locbuf.h (octave_chunk_buffer::~octave_chunk_buffer):
+	Now virtual.
+	(class octave_local_buffer, class octave_chunk_buffer):
+	Don't allow copying or assignment.
+
+	* file-stat.h (base_file_stat::~base_file_stat):
+	Now protected and virtual.
+
 2011-01-13  John W. Eaton  <jwe@octave.org>
 
 	* base-lu.h (base_lu::base_lu): Initialize all data members in
--- a/liboctave/file-stat.h	Thu Jan 13 03:57:11 2011 -0500
+++ b/liboctave/file-stat.h	Thu Jan 13 05:42:24 2011 -0500
@@ -75,8 +75,6 @@
     return *this;
   }
 
-  ~base_file_stat (void) { }
-
   // The minimum difference in file time stamp values.
   // FIXME -- this value should come from the filesystem itself.  How
   // can we get that info?
@@ -147,6 +145,8 @@
 
 protected:
 
+  virtual ~base_file_stat (void) { }
+
   // TRUE means we have already called stat.
   bool initialized;
 
--- a/liboctave/oct-locbuf.h	Thu Jan 13 03:57:11 2011 -0500
+++ b/liboctave/oct-locbuf.h	Thu Jan 13 05:42:24 2011 -0500
@@ -41,8 +41,13 @@
     }
   ~octave_local_buffer (void) { delete [] data; }
   operator T *() const { return data; }
+
 private:
   T *data;
+
+  // No copying!
+  octave_local_buffer (const octave_local_buffer&);
+  octave_local_buffer& operator = (const octave_local_buffer&);
 };
 
 // For buffers of POD types, we'll be more smart. There is one thing that
@@ -59,6 +64,15 @@
 
 class octave_chunk_buffer
 {
+public:
+
+  OCTAVE_API octave_chunk_buffer (size_t size);
+
+  OCTAVE_API virtual ~octave_chunk_buffer (void);
+
+  char *data (void) const { return dat; }
+
+private:
   static const size_t chunk_size;
 
   static char *top, *chunk;
@@ -67,13 +81,9 @@
   char *cnk;
   char *dat;
 
-public:
-
-  OCTAVE_API octave_chunk_buffer (size_t size);
-
-  OCTAVE_API ~octave_chunk_buffer (void);
-
-  char *data (void) const { return dat; }
+  // No copying!
+  octave_chunk_buffer (const octave_chunk_buffer&);
+  octave_chunk_buffer& operator = (const octave_chunk_buffer&);
 };
 
 // This specializes octave_local_buffer to use the chunked buffer mechanism
@@ -83,8 +93,13 @@
 class octave_local_buffer<TYPE> : private octave_chunk_buffer \
 { \
 public: \
-  octave_local_buffer (size_t size) : octave_chunk_buffer (size * sizeof (TYPE)) { } \
-  operator TYPE *() const { return reinterpret_cast<TYPE *> (this->data ()); } \
+  octave_local_buffer (size_t size) \
+    : octave_chunk_buffer (size * sizeof (TYPE)) { } \
+ \
+  operator TYPE *() const \
+  { \
+    return reinterpret_cast<TYPE *> (this->data ()); \
+  } \
 }
 
 SPECIALIZE_POD_BUFFER (bool);
@@ -107,7 +122,10 @@
 class octave_local_buffer<T *> : private octave_chunk_buffer
 {
 public:
-  octave_local_buffer (size_t size) : octave_chunk_buffer (size * sizeof (T *)) { }
+  octave_local_buffer (size_t size)
+    : octave_chunk_buffer (size * sizeof (T *))
+    { }
+
   operator T **() const { return reinterpret_cast<T **> (this->data ()); }
 };
 
@@ -115,8 +133,14 @@
 class octave_local_buffer<const T *> : private octave_chunk_buffer
 {
 public:
-  octave_local_buffer (size_t size) : octave_chunk_buffer (size * sizeof (const T *)) { }
-  operator const T **() const { return reinterpret_cast<const T **> (this->data ()); }
+  octave_local_buffer (size_t size)
+    : octave_chunk_buffer (size * sizeof (const T *))
+    { }
+
+  operator const T **() const
+  {
+    return reinterpret_cast<const T **> (this->data ());
+  }
 };
 
 // If the compiler supports dynamic stack arrays, we can use the attached hack