bug #48464. explicitly picking my own or the auto-generated function, in particular |operator=|. r={vidur, waterson}, a=vidur

This commit is contained in:
scc%mozilla.org 2000-08-11 00:42:41 +00:00
Родитель 65e76de777
Коммит 5082251b3e
9 изменённых файлов: 225 добавлений и 48 удалений

Просмотреть файл

@ -115,8 +115,8 @@ class nsReadingIterator
}
public:
// nsReadingIterator( const nsReadingIterator<CharT>& ); ...use default copy-constructor
// nsReadingIterator<CharT>& operator=( const nsReadingIterator<CharT>& ); ...use default copy-assignment operator
// nsReadingIterator( const nsReadingIterator<CharT>& ); // auto-generated copy-constructor OK
// nsReadingIterator<CharT>& operator=( const nsReadingIterator<CharT>& ); // auto-generated copy-assignment operator OK
inline void normalize_forward();
inline void normalize_backward();
@ -259,7 +259,13 @@ class basic_nsAReadableString
typedef nsReadingIterator<CharT> const_iterator;
// basic_nsAReadableString(); // auto-generated default constructor OK (we're abstract anyway)
// basic_nsAReadableString( const basic_nsAReadableString<CharT>& ); // auto-generated copy-constructor OK (again, only because we're abstract)
private:
// NOT TO BE IMPLEMENTED
void operator=( const basic_nsAReadableString<CharT>& ); // but assignment is _not_ OK (we're immutable) so make it impossible
public:
virtual ~basic_nsAReadableString() { }
// ...yes, I expect to be sub-classed.
@ -685,6 +691,15 @@ class basic_nsLiteralString
}
}
// basic_nsLiteralString( const basic_nsLiteralString<CharT>& ); // auto-generated copy-constructor OK
// ~basic_nsLiteralString(); // auto-generated destructor OK
private:
// NOT TO BE IMPLEMENTED
void operator=( const basic_nsLiteralString<CharT>& ); // we're immutable
public:
virtual PRUint32 Length() const;
operator const CharT*() const
@ -785,6 +800,15 @@ class basic_nsLiteralChar
// nothing else to do here
}
// basic_nsLiteralChar( const basic_nsLiteralString<CharT>& ); // auto-generated copy-constructor OK
// ~basic_nsLiteralChar(); // auto-generated destructor OK
private:
// NOT TO BE IMPLEMENTED
void operator=( const basic_nsLiteralChar<CharT>& ); // we're immutable
public:
virtual
PRUint32
Length() const
@ -889,6 +913,15 @@ class nsPromiseConcatenation
mStrings[kRightString] = &aRightString;
}
// nsPromiseConcatenation( const nsPromiseConcatenation<CharT>& ); // auto-generated copy-constructor should be OK
// ~nsPromiseConcatenation(); // auto-generated destructor OK
private:
// NOT TO BE IMPLEMENTED
void operator=( const nsPromiseConcatenation<CharT>& ); // we're immutable, you can't assign into a concatenation
public:
virtual PRUint32 Length() const;
virtual PRBool Promises( const basic_nsAReadableString<CharT>& ) const;
// virtual PRBool PromisesExactly( const basic_nsAReadableString<CharT>& ) const;
@ -1035,6 +1068,14 @@ class nsPromiseSubstring
// nothing else to do here
}
// nsPromiseSubstring( const nsPromiseSubstring<CharT>& ); // auto-generated copy-constructor should be OK
// ~nsPromiseSubstring(); // auto-generated destructor OK
private:
// NOT TO BE IMPLEMENTED
void operator=( const nsPromiseSubstring<CharT>& ); // we're immutable, you can't assign into a substring
public:
virtual PRUint32 Length() const;
virtual PRBool Promises( const basic_nsAReadableString<CharT>& aString ) const { return mString.Promises(aString); }

Просмотреть файл

@ -77,8 +77,8 @@ class nsWritingIterator
}
public:
// nsWritingIterator( const nsWritingIterator<CharT>& ); ...use default copy-constructor
// nsWritingIterator<CharT>& operator=( const nsWritingIterator<CharT>& ); ...use default copy-assignment operator
// nsWritingIterator( const nsWritingIterator<CharT>& ); // auto-generated copy-constructor OK
// nsWritingIterator<CharT>& operator=( const nsWritingIterator<CharT>& ); // auto-generated copy-assignment operator OK
inline void normalize_forward();
inline void normalize_backward();
@ -224,11 +224,17 @@ class basic_nsAWritableString
// friend class nsWritingIterator<CharT>;
public:
typedef CharT char_type;
typedef PRUint32 size_type;
typedef PRUint32 index_type;
typedef nsWritingIterator<CharT> iterator;
// basic_nsAWritableString(); // auto-generated default constructor OK (we're abstract anyway)
// basic_nsAWritableString( const basic_nsAWritableString<CharT>& ); // auto-generated copy-constructor OK (again, only because we're abstract)
// ~basic_nsAWritableString(); // auto-generated destructor OK
// see below for copy-assignment operator
virtual CharT* GetWritableFragment( nsWritableFragment<CharT>&, nsFragmentRequest, PRUint32 = 0 ) = 0;
@ -311,6 +317,9 @@ class basic_nsAWritableString
void Assign( const CharT* aPtr, PRUint32 aLength ) { do_AssignFromElementPtrLength(aPtr, aLength); }
void Assign( CharT aChar ) { do_AssignFromElement(aChar); }
// copy-assignment operator. I must define my own if I don't want the compiler to make me one
basic_nsAWritableString<CharT>& operator=( const basic_nsAWritableString<CharT>& aWritable ) { Assign(aWritable); return *this; }
basic_nsAWritableString<CharT>& operator=( const basic_nsAReadableString<CharT>& aReadable ) { Assign(aReadable); return *this; }
basic_nsAWritableString<CharT>& operator=( const nsPromiseReadable<CharT>& aReadable ) { Assign(aReadable); return *this; }
basic_nsAWritableString<CharT>& operator=( const CharT* aPtr ) { Assign(aPtr); return *this; }

Просмотреть файл

@ -37,11 +37,23 @@ class basic_nsSharedString
...
*/
{
private:
~basic_nsSharedString() { }
// You can't sub-class me, or make an instance of me on the stack
public:
basic_nsSharedString( const CharT* data, size_t length )
: mRefCount(0), mData(data), mLength(length)
{
// nothing else to do here
}
// operator delete
private:
~basic_nsSharedString() { } // You can't sub-class me, or make an instance of me on the stack
// NOT TO BE IMPLEMENTED
// we're reference counted, remember. copying and passing by value are wrong
// basic_nsSharedString(); // we define at least one constructor, so the default constructor will not be auto-generated. It's wrong to create me with no data anyway
basic_nsSharedString( const basic_nsSharedString<CharT>& ); // copy-constructor, the auto generated one would reference somebody elses data
void operator=( const basic_nsSharedString<CharT>& ); // copy-assignment operator
// operator delete?
public:
@ -54,12 +66,6 @@ class basic_nsSharedString
return mLength;
}
basic_nsSharedString( const CharT* data, size_t length )
: mRefCount(0), mData(data), mLength(length)
{
// nothing else to do here
}
nsrefcnt
AddRef() const
{
@ -72,8 +78,8 @@ class basic_nsSharedString
nsrefcnt result = --mRefCount;
if ( !mRefCount )
{
delete this;
// BULLSHIT ALERT: need to make |delete| match |new|
// would have to call my destructor by hand here, if there was anything to destruct
operator delete(this); // form of |delete| should always match the |new|
}
return result;
}
@ -111,8 +117,10 @@ template <class CharT>
class basic_nsSharedStringPtr
{
public:
// default constructor
basic_nsSharedStringPtr() : mRawPtr(0) { }
// copy-constructor
basic_nsSharedStringPtr( const basic_nsSharedStringPtr<CharT>& rhs )
: mRawPtr(rhs.mRawPtr)
{
@ -125,6 +133,7 @@ class basic_nsSharedStringPtr
mRawPtr->Release();
}
// copy-assignment operator
basic_nsSharedStringPtr<CharT>&
operator=( const basic_nsSharedStringPtr<CharT>& );

Просмотреть файл

@ -115,8 +115,8 @@ class nsReadingIterator
}
public:
// nsReadingIterator( const nsReadingIterator<CharT>& ); ...use default copy-constructor
// nsReadingIterator<CharT>& operator=( const nsReadingIterator<CharT>& ); ...use default copy-assignment operator
// nsReadingIterator( const nsReadingIterator<CharT>& ); // auto-generated copy-constructor OK
// nsReadingIterator<CharT>& operator=( const nsReadingIterator<CharT>& ); // auto-generated copy-assignment operator OK
inline void normalize_forward();
inline void normalize_backward();
@ -259,7 +259,13 @@ class basic_nsAReadableString
typedef nsReadingIterator<CharT> const_iterator;
// basic_nsAReadableString(); // auto-generated default constructor OK (we're abstract anyway)
// basic_nsAReadableString( const basic_nsAReadableString<CharT>& ); // auto-generated copy-constructor OK (again, only because we're abstract)
private:
// NOT TO BE IMPLEMENTED
void operator=( const basic_nsAReadableString<CharT>& ); // but assignment is _not_ OK (we're immutable) so make it impossible
public:
virtual ~basic_nsAReadableString() { }
// ...yes, I expect to be sub-classed.
@ -685,6 +691,15 @@ class basic_nsLiteralString
}
}
// basic_nsLiteralString( const basic_nsLiteralString<CharT>& ); // auto-generated copy-constructor OK
// ~basic_nsLiteralString(); // auto-generated destructor OK
private:
// NOT TO BE IMPLEMENTED
void operator=( const basic_nsLiteralString<CharT>& ); // we're immutable
public:
virtual PRUint32 Length() const;
operator const CharT*() const
@ -785,6 +800,15 @@ class basic_nsLiteralChar
// nothing else to do here
}
// basic_nsLiteralChar( const basic_nsLiteralString<CharT>& ); // auto-generated copy-constructor OK
// ~basic_nsLiteralChar(); // auto-generated destructor OK
private:
// NOT TO BE IMPLEMENTED
void operator=( const basic_nsLiteralChar<CharT>& ); // we're immutable
public:
virtual
PRUint32
Length() const
@ -889,6 +913,15 @@ class nsPromiseConcatenation
mStrings[kRightString] = &aRightString;
}
// nsPromiseConcatenation( const nsPromiseConcatenation<CharT>& ); // auto-generated copy-constructor should be OK
// ~nsPromiseConcatenation(); // auto-generated destructor OK
private:
// NOT TO BE IMPLEMENTED
void operator=( const nsPromiseConcatenation<CharT>& ); // we're immutable, you can't assign into a concatenation
public:
virtual PRUint32 Length() const;
virtual PRBool Promises( const basic_nsAReadableString<CharT>& ) const;
// virtual PRBool PromisesExactly( const basic_nsAReadableString<CharT>& ) const;
@ -1035,6 +1068,14 @@ class nsPromiseSubstring
// nothing else to do here
}
// nsPromiseSubstring( const nsPromiseSubstring<CharT>& ); // auto-generated copy-constructor should be OK
// ~nsPromiseSubstring(); // auto-generated destructor OK
private:
// NOT TO BE IMPLEMENTED
void operator=( const nsPromiseSubstring<CharT>& ); // we're immutable, you can't assign into a substring
public:
virtual PRUint32 Length() const;
virtual PRBool Promises( const basic_nsAReadableString<CharT>& aString ) const { return mString.Promises(aString); }

Просмотреть файл

@ -77,8 +77,8 @@ class nsWritingIterator
}
public:
// nsWritingIterator( const nsWritingIterator<CharT>& ); ...use default copy-constructor
// nsWritingIterator<CharT>& operator=( const nsWritingIterator<CharT>& ); ...use default copy-assignment operator
// nsWritingIterator( const nsWritingIterator<CharT>& ); // auto-generated copy-constructor OK
// nsWritingIterator<CharT>& operator=( const nsWritingIterator<CharT>& ); // auto-generated copy-assignment operator OK
inline void normalize_forward();
inline void normalize_backward();
@ -224,11 +224,17 @@ class basic_nsAWritableString
// friend class nsWritingIterator<CharT>;
public:
typedef CharT char_type;
typedef PRUint32 size_type;
typedef PRUint32 index_type;
typedef nsWritingIterator<CharT> iterator;
// basic_nsAWritableString(); // auto-generated default constructor OK (we're abstract anyway)
// basic_nsAWritableString( const basic_nsAWritableString<CharT>& ); // auto-generated copy-constructor OK (again, only because we're abstract)
// ~basic_nsAWritableString(); // auto-generated destructor OK
// see below for copy-assignment operator
virtual CharT* GetWritableFragment( nsWritableFragment<CharT>&, nsFragmentRequest, PRUint32 = 0 ) = 0;
@ -311,6 +317,9 @@ class basic_nsAWritableString
void Assign( const CharT* aPtr, PRUint32 aLength ) { do_AssignFromElementPtrLength(aPtr, aLength); }
void Assign( CharT aChar ) { do_AssignFromElement(aChar); }
// copy-assignment operator. I must define my own if I don't want the compiler to make me one
basic_nsAWritableString<CharT>& operator=( const basic_nsAWritableString<CharT>& aWritable ) { Assign(aWritable); return *this; }
basic_nsAWritableString<CharT>& operator=( const basic_nsAReadableString<CharT>& aReadable ) { Assign(aReadable); return *this; }
basic_nsAWritableString<CharT>& operator=( const nsPromiseReadable<CharT>& aReadable ) { Assign(aReadable); return *this; }
basic_nsAWritableString<CharT>& operator=( const CharT* aPtr ) { Assign(aPtr); return *this; }

Просмотреть файл

@ -37,11 +37,23 @@ class basic_nsSharedString
...
*/
{
private:
~basic_nsSharedString() { }
// You can't sub-class me, or make an instance of me on the stack
public:
basic_nsSharedString( const CharT* data, size_t length )
: mRefCount(0), mData(data), mLength(length)
{
// nothing else to do here
}
// operator delete
private:
~basic_nsSharedString() { } // You can't sub-class me, or make an instance of me on the stack
// NOT TO BE IMPLEMENTED
// we're reference counted, remember. copying and passing by value are wrong
// basic_nsSharedString(); // we define at least one constructor, so the default constructor will not be auto-generated. It's wrong to create me with no data anyway
basic_nsSharedString( const basic_nsSharedString<CharT>& ); // copy-constructor, the auto generated one would reference somebody elses data
void operator=( const basic_nsSharedString<CharT>& ); // copy-assignment operator
// operator delete?
public:
@ -54,12 +66,6 @@ class basic_nsSharedString
return mLength;
}
basic_nsSharedString( const CharT* data, size_t length )
: mRefCount(0), mData(data), mLength(length)
{
// nothing else to do here
}
nsrefcnt
AddRef() const
{
@ -72,8 +78,8 @@ class basic_nsSharedString
nsrefcnt result = --mRefCount;
if ( !mRefCount )
{
delete this;
// BULLSHIT ALERT: need to make |delete| match |new|
// would have to call my destructor by hand here, if there was anything to destruct
operator delete(this); // form of |delete| should always match the |new|
}
return result;
}
@ -111,8 +117,10 @@ template <class CharT>
class basic_nsSharedStringPtr
{
public:
// default constructor
basic_nsSharedStringPtr() : mRawPtr(0) { }
// copy-constructor
basic_nsSharedStringPtr( const basic_nsSharedStringPtr<CharT>& rhs )
: mRawPtr(rhs.mRawPtr)
{
@ -125,6 +133,7 @@ class basic_nsSharedStringPtr
mRawPtr->Release();
}
// copy-assignment operator
basic_nsSharedStringPtr<CharT>&
operator=( const basic_nsSharedStringPtr<CharT>& );

Просмотреть файл

@ -115,8 +115,8 @@ class nsReadingIterator
}
public:
// nsReadingIterator( const nsReadingIterator<CharT>& ); ...use default copy-constructor
// nsReadingIterator<CharT>& operator=( const nsReadingIterator<CharT>& ); ...use default copy-assignment operator
// nsReadingIterator( const nsReadingIterator<CharT>& ); // auto-generated copy-constructor OK
// nsReadingIterator<CharT>& operator=( const nsReadingIterator<CharT>& ); // auto-generated copy-assignment operator OK
inline void normalize_forward();
inline void normalize_backward();
@ -259,7 +259,13 @@ class basic_nsAReadableString
typedef nsReadingIterator<CharT> const_iterator;
// basic_nsAReadableString(); // auto-generated default constructor OK (we're abstract anyway)
// basic_nsAReadableString( const basic_nsAReadableString<CharT>& ); // auto-generated copy-constructor OK (again, only because we're abstract)
private:
// NOT TO BE IMPLEMENTED
void operator=( const basic_nsAReadableString<CharT>& ); // but assignment is _not_ OK (we're immutable) so make it impossible
public:
virtual ~basic_nsAReadableString() { }
// ...yes, I expect to be sub-classed.
@ -685,6 +691,15 @@ class basic_nsLiteralString
}
}
// basic_nsLiteralString( const basic_nsLiteralString<CharT>& ); // auto-generated copy-constructor OK
// ~basic_nsLiteralString(); // auto-generated destructor OK
private:
// NOT TO BE IMPLEMENTED
void operator=( const basic_nsLiteralString<CharT>& ); // we're immutable
public:
virtual PRUint32 Length() const;
operator const CharT*() const
@ -785,6 +800,15 @@ class basic_nsLiteralChar
// nothing else to do here
}
// basic_nsLiteralChar( const basic_nsLiteralString<CharT>& ); // auto-generated copy-constructor OK
// ~basic_nsLiteralChar(); // auto-generated destructor OK
private:
// NOT TO BE IMPLEMENTED
void operator=( const basic_nsLiteralChar<CharT>& ); // we're immutable
public:
virtual
PRUint32
Length() const
@ -889,6 +913,15 @@ class nsPromiseConcatenation
mStrings[kRightString] = &aRightString;
}
// nsPromiseConcatenation( const nsPromiseConcatenation<CharT>& ); // auto-generated copy-constructor should be OK
// ~nsPromiseConcatenation(); // auto-generated destructor OK
private:
// NOT TO BE IMPLEMENTED
void operator=( const nsPromiseConcatenation<CharT>& ); // we're immutable, you can't assign into a concatenation
public:
virtual PRUint32 Length() const;
virtual PRBool Promises( const basic_nsAReadableString<CharT>& ) const;
// virtual PRBool PromisesExactly( const basic_nsAReadableString<CharT>& ) const;
@ -1035,6 +1068,14 @@ class nsPromiseSubstring
// nothing else to do here
}
// nsPromiseSubstring( const nsPromiseSubstring<CharT>& ); // auto-generated copy-constructor should be OK
// ~nsPromiseSubstring(); // auto-generated destructor OK
private:
// NOT TO BE IMPLEMENTED
void operator=( const nsPromiseSubstring<CharT>& ); // we're immutable, you can't assign into a substring
public:
virtual PRUint32 Length() const;
virtual PRBool Promises( const basic_nsAReadableString<CharT>& aString ) const { return mString.Promises(aString); }

Просмотреть файл

@ -77,8 +77,8 @@ class nsWritingIterator
}
public:
// nsWritingIterator( const nsWritingIterator<CharT>& ); ...use default copy-constructor
// nsWritingIterator<CharT>& operator=( const nsWritingIterator<CharT>& ); ...use default copy-assignment operator
// nsWritingIterator( const nsWritingIterator<CharT>& ); // auto-generated copy-constructor OK
// nsWritingIterator<CharT>& operator=( const nsWritingIterator<CharT>& ); // auto-generated copy-assignment operator OK
inline void normalize_forward();
inline void normalize_backward();
@ -224,11 +224,17 @@ class basic_nsAWritableString
// friend class nsWritingIterator<CharT>;
public:
typedef CharT char_type;
typedef PRUint32 size_type;
typedef PRUint32 index_type;
typedef nsWritingIterator<CharT> iterator;
// basic_nsAWritableString(); // auto-generated default constructor OK (we're abstract anyway)
// basic_nsAWritableString( const basic_nsAWritableString<CharT>& ); // auto-generated copy-constructor OK (again, only because we're abstract)
// ~basic_nsAWritableString(); // auto-generated destructor OK
// see below for copy-assignment operator
virtual CharT* GetWritableFragment( nsWritableFragment<CharT>&, nsFragmentRequest, PRUint32 = 0 ) = 0;
@ -311,6 +317,9 @@ class basic_nsAWritableString
void Assign( const CharT* aPtr, PRUint32 aLength ) { do_AssignFromElementPtrLength(aPtr, aLength); }
void Assign( CharT aChar ) { do_AssignFromElement(aChar); }
// copy-assignment operator. I must define my own if I don't want the compiler to make me one
basic_nsAWritableString<CharT>& operator=( const basic_nsAWritableString<CharT>& aWritable ) { Assign(aWritable); return *this; }
basic_nsAWritableString<CharT>& operator=( const basic_nsAReadableString<CharT>& aReadable ) { Assign(aReadable); return *this; }
basic_nsAWritableString<CharT>& operator=( const nsPromiseReadable<CharT>& aReadable ) { Assign(aReadable); return *this; }
basic_nsAWritableString<CharT>& operator=( const CharT* aPtr ) { Assign(aPtr); return *this; }

Просмотреть файл

@ -37,11 +37,23 @@ class basic_nsSharedString
...
*/
{
private:
~basic_nsSharedString() { }
// You can't sub-class me, or make an instance of me on the stack
public:
basic_nsSharedString( const CharT* data, size_t length )
: mRefCount(0), mData(data), mLength(length)
{
// nothing else to do here
}
// operator delete
private:
~basic_nsSharedString() { } // You can't sub-class me, or make an instance of me on the stack
// NOT TO BE IMPLEMENTED
// we're reference counted, remember. copying and passing by value are wrong
// basic_nsSharedString(); // we define at least one constructor, so the default constructor will not be auto-generated. It's wrong to create me with no data anyway
basic_nsSharedString( const basic_nsSharedString<CharT>& ); // copy-constructor, the auto generated one would reference somebody elses data
void operator=( const basic_nsSharedString<CharT>& ); // copy-assignment operator
// operator delete?
public:
@ -54,12 +66,6 @@ class basic_nsSharedString
return mLength;
}
basic_nsSharedString( const CharT* data, size_t length )
: mRefCount(0), mData(data), mLength(length)
{
// nothing else to do here
}
nsrefcnt
AddRef() const
{
@ -72,8 +78,8 @@ class basic_nsSharedString
nsrefcnt result = --mRefCount;
if ( !mRefCount )
{
delete this;
// BULLSHIT ALERT: need to make |delete| match |new|
// would have to call my destructor by hand here, if there was anything to destruct
operator delete(this); // form of |delete| should always match the |new|
}
return result;
}
@ -111,8 +117,10 @@ template <class CharT>
class basic_nsSharedStringPtr
{
public:
// default constructor
basic_nsSharedStringPtr() : mRawPtr(0) { }
// copy-constructor
basic_nsSharedStringPtr( const basic_nsSharedStringPtr<CharT>& rhs )
: mRawPtr(rhs.mRawPtr)
{
@ -125,6 +133,7 @@ class basic_nsSharedStringPtr
mRawPtr->Release();
}
// copy-assignment operator
basic_nsSharedStringPtr<CharT>&
operator=( const basic_nsSharedStringPtr<CharT>& );