Index: net/base/io_buffer.h |
=================================================================== |
--- net/base/io_buffer.h (revision 31079) |
+++ net/base/io_buffer.h (working copy) |
@@ -18,16 +18,20 @@ |
public: |
IOBuffer() : data_(NULL) {} |
explicit IOBuffer(int buffer_size); |
- virtual ~IOBuffer() { |
- delete[] data_; |
- } |
char* data() { return data_; } |
protected: |
+ friend class base::RefCountedThreadSafe<IOBuffer>; |
+ |
// Only allow derived classes to specify data_. |
// In all other cases, we own data_, and must delete it at destruction time. |
explicit IOBuffer(char* data) : data_(data) {} |
+ |
+ virtual ~IOBuffer() { |
+ delete[] data_; |
+ } |
+ |
char* data_; |
}; |
@@ -38,11 +42,12 @@ |
class IOBufferWithSize : public IOBuffer { |
public: |
explicit IOBufferWithSize(int size) : IOBuffer(size), size_(size) {} |
- ~IOBufferWithSize() {} |
int size() const { return size_; } |
private: |
+ ~IOBufferWithSize() {} |
+ |
int size_; |
}; |
@@ -55,15 +60,16 @@ |
string_data_(s) { |
data_ = const_cast<char*>(string_data_.data()); |
} |
+ |
+ int size() const { return string_data_.size(); } |
+ |
+ private: |
~StringIOBuffer() { |
// We haven't allocated the buffer, so remove it before the base class |
// destructor tries to delete[] it. |
data_ = NULL; |
} |
- int size() const { return string_data_.size(); } |
- |
- private: |
std::string string_data_; |
}; |
@@ -73,10 +79,6 @@ |
public: |
DrainableIOBuffer(IOBuffer* base, int size) |
: IOBuffer(base->data()), base_(base), size_(size), used_(0) {} |
- ~DrainableIOBuffer() { |
- // The buffer is owned by the |base_| instance. |
- data_ = NULL; |
- } |
// DidConsume() changes the |data_| pointer so that |data_| always points |
// to the first unconsumed byte. |
@@ -95,6 +97,11 @@ |
int size() const { return size_; } |
private: |
+ ~DrainableIOBuffer() { |
+ // The buffer is owned by the |base_| instance. |
+ data_ = NULL; |
+ } |
+ |
scoped_refptr<IOBuffer> base_; |
int size_; |
int used_; |
@@ -104,7 +111,6 @@ |
class GrowableIOBuffer : public IOBuffer { |
public: |
GrowableIOBuffer() : IOBuffer(), capacity_(0), offset_(0) {} |
- ~GrowableIOBuffer() { data_ = NULL; } |
// realloc memory to the specified capacity. Returns true on success. |
// On failure, the capacity and buffer are unchanged. |
@@ -119,6 +125,8 @@ |
char* StartOfBuffer() { return real_data_.get(); } |
private: |
+ ~GrowableIOBuffer() { data_ = NULL; } |
+ |
scoped_ptr_malloc<char> real_data_; |
int capacity_; |
int offset_; |
@@ -133,6 +141,8 @@ |
public: |
explicit WrappedIOBuffer(const char* data) |
: IOBuffer(const_cast<char*>(data)) {} |
+ |
+ protected: |
~WrappedIOBuffer() { |
data_ = NULL; |
} |