У меня проблема с записью конструктора копирования для указателей на объекты.Это моя точная проблема
У меня есть класс G1, в котором объект s1 является его личным членом данных.Это объект структуры.
Структура состоит из vector<pair<int,pointer to another object of a different class>>.
Теперь, когда я создаю указатель для G1, все в порядке.
Когда я пытаюсьчтобы скопировать этот указатель на другой новый указатель того же класса, он делает поверхностную копию.
Поэтому, когда я пытаюсь удалить первый указатель, второй теряет свою ссылку.
Мой код что-то идетвот так.
template <typename T,typename V>
class G1{
private:
S<typename T> s1;
public:
G1<T,V>(){}
G1<T,V>(const G1<T,V>& g2):s1(g2.s1){}
};
template<typename T>
struct S{
private:
vector<pair<int,B<T>*>> smap;
public:
S<T>(const S& st){
for(vector<pair<int,B<T>*>>::iterator it = st.getMap().begin(); it!= st.getMap().end(); it++){
B<T> bptr = new B<T>(*it->second);
smap.push_back(pair<*(it)->first,bptr>);
}
}
};
// ПРИНЯТЬ КЛАСС B НАСТОЯЩЕГО, КОТОРОЕ ПРОСТО ИМЕЕТ ЗНАЧЕНИЕ ТИПА, И НЕ ТРЕБУЕТСЯ КОНСТРУКТОР, ОПРЕДЕЛЯЕМЫЙ ПОЛЬЗОВАТЕЛЕМ.
void main(){
G1<string,string>* g1= new G1<string,string>;
//values loaded into g1.
G1<string,string>* g2= g1;
delete g1;
g2.display(); //Code breaks at this point since I am not able to create two pointers pointing different locations.
// I am not able to make a new copy of the smap vector which has pointers and hence the problem.
}
Любые предложения, пожалуйста.при выполнении указателей будет вызван конструктор копирования?Во время отладки в Visual Studio я не вижу, как вызывается функция конструктора копирования или оператора присваивания.
Элемент-указатель в классе, для которого необходимо создать глубокое копирование, прост.Я запутываюсь, когда указатель объявляется в каком-то другом классе, чей объект используется в классе, для которого необходимо создать глубокую копию.
Может кто-нибудь дать подсказку о том, как сделать глубокую копию ввышеуказанный случай?