我很努力爲包含指針數組的結構寫(我的第一個)交換函數。寫交換函數的問題
struct Foo
{
unsigned int Count;
int* Items;
Foo()
{
Count = 0;
Items = 0;
}
Foo(const Foo& foo)
{
Items = 0;
swap(foo); // cannot convert argument 1 from 'const Foo' to 'Foo *'
}
Foo(const unsigned int itemCount)
{
Count = itemCount;
Items = new int[itemCount];
for (int i = 0; i < itemCount; i++)
{
Items[i] = 123;
}
}
Foo& operator=(const Foo& foo)
{
swap(foo); // cannot convert argument 1 from 'const Foo' to 'Foo *'
return *this;
}
void swap(Foo* foo)
{
unsigned int a(Count);
int* b(Items);
Count = foo->Count;
Items = foo->Items;
foo->Count = a;
foo->Items = b;
}
~Foo()
{
delete[] Items;
}
};
誰能請幫助我的語法?
我這樣做的原因是爲了幫助我理解這可以如何與指針數組一起工作?
我已經在線閱讀,它是異常安全的,因爲它不分配新的內存來做到這一點?當然,
a
和b
都分配了內存,如果內存不可用,因此可能會失敗?
編輯: 基於由lucacox答案...
void swap(Foo* foo1, Foo* foo2)
{
unsigned int a(foo1->Count);
int* b(foo1->Items);
foo1->Count = foo2->Count;
foo1->Items = foo2->Items;
foo2->Count = a;
foo2->Items = b;
}
這樣調用...
swap(&foo, this); // cannot convert argument 1 from 'const Foo' to 'Foo *'
我仍然得到一個const轉換錯誤?
任何特定的原因,你不使用'std :: vector'? –
Biffen
2014-10-02 12:31:25
是的。這是交換理論的練習。 – Beakie 2014-10-02 12:32:03
@Beakie [三條法則是什麼?](https://stackoverflow.com/questions/4172722/what-is-the-rule-of-ree) – 2014-10-02 12:33:35