Informationen zum Destruktor der C++-Klassenvorlage
漂亮男人
漂亮男人 2017-05-16 13:25:14
0
1
710

1. Ich habe gerade in meinem ersten Jahr C++ gelernt und bin auf einige Probleme gestoßen. Wenn etwas nicht stimmt, können Sie mir hoffentlich einen Rat geben.
2. Warum wird der Destruktor beim Instanziieren einer Mitgliedsfunktion einer Klassenvorlage automatisch aufgerufen, nachdem die Funktion beendet ist? Zum Beispiel

~set()
{
    cout<<"destory!"<<endl;
}
private:
    int size;
    T *p;
void set<T>::intersection(set s2) //交集
int cnt = 0;
int size2 = s2.size;
sort(p, p + size);
sort(s2.p, s2.p + size2);
int MaxSize = max(size, size2);
T *tmp = new T[MaxSize];

if (MaxSize == size)//集合A含元素个数大于B
    for (int i = 0; i<MaxSize; i++)
        if (s2.b_search(p[i])) //二分查找
            tmp[cnt++] = p[i];

else if (size != size2)
    for (int i = 0; i<MaxSize; i++)
        if (b_search(s2.p[i]))
            tmp[cnt++] = s2.p[i];

for (int i = 0; i<cnt - 1; i++)
    cout << tmp[i] << ",";
cout << tmp[cnt - 1];

In diesem Fall
int a2[] = { 2,4,1,6,0 }; int a2[] = { 2,4,1,6,0 };
int a4[] = { 2,4,6,8,9 };
set<int> t2(a2, 5);
set<int> t4(a4, 5);
调用 t2.intersection(t4); 时最后会显示destory!int a4[] = { 2,4,6,8,9 }; < /code>

set<int> t2(a2, 5); 🎜set<int> t4(a4, 5); 🎜Call t2.intersection ( t4); zeigt endlich destory! an. Warum wird der Destruktor so früh aufgerufen? Wenn zu diesem Zeitpunkt delete []p zum Destruktor hinzugefügt wird, wird ein Fehler gemeldet@_@🎜
漂亮男人
漂亮男人

Antworte allen(1)
伊谢尔伦
//这里的s2会进行拷贝构造,变成 (set &s2) 就没有事了
void set<T>::intersection(set s2){
//start
//...
//end
} // 这里的s2会调用析构


Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage