Здесь вы ошиблись:
, поскольку массив является указателем
Это не так.Массивы распадаются на указатель, но это не одно и то же.
Однако вы можете легко сделать то, что вам нужно, фактически получая указатели из этих массивов.
Foo bar[8], baz[8];
// load bar up with valid data
Foo *data = bar;
Foo *garbage = baz;
// compute next step
std::swap(data,garbage);
Также рассмотрите возможность использования std::array
вместо необработанных массивов (он обладает свойствами, более совместимыми с другими типами в C ++ и менее «специальным», чем необработанные массивы).Тогда, когда вы используете указатели на эти массивы, размер массива не будет отбрасываться, как это делается для указателей на необработанные массивы.
std::array<Foo,8> bar, baz;
std::array<Foo,8> *data = &bar;
std::array<Foo,8> *garbage = &baz;
// compute next step
std::swap(data,garbage);
Если вам нужны массивы динамического размера, используйте std::vector
, а затемВы можете просто поменять векторы напрямую, а не поменять указатели на векторы, потому что поменяются векторы, чтобы поменять местами указатели внутри векторов.
std::vector<Foo> data, garbage;
// compute next step
std::swap(data,garbage);