Как правило, рекомендуется использовать указатели, когда это необходимо, но ссылаться на объекты или альтернативные объекты (думать о значениях), когда это возможно.
Сначала необходимо узнать, удовлетворяет ли gVector3
требованиям стандартных контейнеров, а именно, можно ли копировать и назначать тип gVector3
. Это полезно, если gVector3
также является конструктивным по умолчанию (см. Примечание ОБНОВЛЕНИЕ ниже).
Предполагая, что это так, у вас есть два варианта, хранить объекты gVector3
непосредственно в std::vector
std::vector<gVector3> points;
points.push_back(gVector(1, 2, 3)); // std::vector will make a copy of passed object
или управляйте созданием (а также уничтожением) gVector3
объектов вручную.
std :: vector points;
points.push_back (новый gVector3 (1, 2, 3));
//...
Когда массив points
больше не нужен, не забудьте обсудить все элементы и вызвать на нем оператор delete
.
Теперь, это ваш выбор, если вы можете манипулировать gVector3
как объектами (вы можете думать о них как о значениях или объектах значений), потому что (если, смотрите условие выше) благодаря доступности конструктора копирования и оператора присваивания, следующее Возможны операции:
gVector3 v1(1, 2, 3);
gVector3 v2;
v2 = v1; // assignment
gVector3 v3(v2); // copy construction
или вам может потребоваться или вам нужно выделить объекты gVector3
в динамическом хранилище с помощью оператора new. Это означает, что вам может потребоваться или вам необходимо самостоятельно управлять временем жизни этих объектов.
Кстати, вам может быть интересно Когда я должен использовать ссылки, а когда я должен использовать указатели?
ОБНОВЛЕНИЕ: Вот пояснение к примечанию по конструктивности по умолчанию . Спасибо Нейлу за то, что он указал, что это было первоначально неясно. Как правильно заметил Нил, это не требуется стандартом C ++, однако я указал на эту функцию, потому что она важна и полезна. Если тип T
не является конструируемым по умолчанию, что не требуется стандартом C ++, тогда пользователь должен знать о потенциальных проблемах, которые я попытаюсь проиллюстрировать ниже:
#include <vector>
struct T
{
int i;
T(int i) : i(i) {}
};
int main()
{
// Request vector of 10 elements
std::vector<T> v(10); // Compilation error about missing T::T() function/ctor
}