У меня проблема с написанием конструктора копирования для указателей на объекты. это точно моя проблема
У меня есть класс 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 я не вижу вызываемой функции конструктора копирования или оператора присваивания.
Элемент указателя в классе, для которого необходимо создать глубокую копию, прост. Меня смущает, когда указатель объявляется в каком-то другом классе, объект которого используется в классе, для которого необходимо создать глубокую копию.
Может ли кто-нибудь подсказать, как сделать глубокую копию в приведенном выше случае?