Ah yes, the copy assignment operator, I always forget to write that one.

Code:
array & operator = (const array & orig){
	internal = orig.internal;
	++internal -> refcount;
	return *this;
}
Yes, my original code was using a shallow copy, but then I realized how dumb that was, seeing as the destructor deleted the array and anything that had been shallow copied would become invalid.