Как реализован push_back
из stl::vector
, чтобы он мог копировать данные любого типа... может быть указателем, двойным указателем и т. д....
Я реализую класс шаблона, имеющий функцию push_back
, почти аналогичную вектору. В этом методе копия аргумента должна быть вставлена во внутреннюю выделенную память.
В случае, если аргумент является указателем или цепочкой указателей (указатель на объект); копия должна быть сделана из фактических данных, указанных. [обновлено согласно комментарию]
Не могли бы вы рассказать, как создать копию из указателя. так что, если я удалю указатель в вызывающем объекте, копия все еще существует в моем классе шаблонов?
Кодовая база выглядит следующим образом:
template<typename T>
class Vector
{
public:
void push_back(const T& val_in)
{
T a (val_in); // It copies pointer, NOT data.
m_pData[SIZE++] = a;
}
}
Caller:
// Initialize my custom Vector class.
Vector<MyClass*> v(3);
MyClass* a = new MyClass();
a->a = 0;
a->b = .5;
// push MyClass object pointer
// now push_back method should create a copy of data
// pointed by 'a' and insert it to internal allocated memory.
// 'a' can be a chain of pointers also.
// how to achieve this functionality?
v.push_back(a);
delete a;
Я могу просто использовать вектор STL для выполнения задач, но в целях эксперимента я пишу класс шаблона, который делает то же самое.
Спасибо.
new
везде. От этого в моей голове звенят все тревожные звоночки. Вы (ab) используете C++, как если бы это была Java или C# (или как если бы вы прочитали несколько онлайн-руководств) - person jalf   schedule 24.06.2011push_back
быть указателем или указатели являются внутренней деталью (т.е. внутренняя выделенная память: это единое выделение для всех содержащихся объектов, или отдельное выделение для каждого объекта). Собственно говоря, вы должны начать объяснять, какие у вас есть требования, которые не удовлетворяются стандартными библиотеками, чтобы было понятно, что вам нужно. - person David Rodríguez - dribeas   schedule 24.06.2011push_back
, похожей на вектор STL. Я обновлю вопрос с более подробной информацией. - person Azodious   schedule 24.06.2011