我正在寫與非類型參數的模板類具有非類型參數的C++模板類:如何重載賦值運算符?
class Test
{
public:
Test() { std::cout << "Test::Test()" << std::endl; }
Test(Test const&) { std::cout << "Test::Test(Test const&)" << std::endl; }
~Test() { std::cout << "Test::~Test()" << std::endl; }
Test& operator=(Test const&)
{
std::cout << "Test& Test::operator=(Test const&)" << std::endl;
return *this;
}
void print() const { std::cout << "Test::print() const" << std::endl; }
void print() { std::cout << "Test::print()" << std::endl; }
};
以上就是我的「測試」類來測試我的模板類和
template <typename T, unsigned int n>
class Array
{
private:
T* value;
public:
Array() {
this->value = new T[n];
}
~Array() {
delete[] this->value;
}
Array* operator=(const Array* arr)
{
this->value = arr->value;
return this->value;
}
T& operator[](int a) {
return this->value[a];
}
unsigned int size()
{
return n;
}
};
以上是我的模板類與非型參數。
int main(int, char*[])
{
/*first*/ Array<Test, 3> arr_1;
/*second*/ Array<Test, 3> arr_3 = arr_1;
return 0;
}
在我的main.cpp文件,
我做一流的檢測對象與第一個3次,
,我想重載賦值運算符做第二個。
我
Array* operator=(const Array* arr)
{
this->value = arr->value;
return this->value;
}
但 '段錯誤' 嘗試無限調用析構函數後。
我想知道如何在這種情況下編寫賦值運算符重載。
謝謝!
通常,賦值運算符會將*引用*接收到相同類型的對象,而不是*指針*。那是故意的嗎? – templatetypedef
'Array arr_3 = arr_1;'使用拷貝構造函數,而不是拷貝賦值操作符。無論如何,'Array'並沒有明確的實現;兩者都是隱含定義的。 –
@templatetypedef,我試着用Array&operator =(const Array&arr),但它沒有改變結果。也許我沒有正確實施該方法。 –