Heim  >  Fragen und Antworten  >  Hauptteil

Informationen zum Destruktor der C++-Klassenvorlage

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@_@🎜
漂亮男人漂亮男人2683 Tage vor641

Antworte allen(1)Ich werde antworten

  • 伊谢尔伦

    伊谢尔伦2017-05-16 13:27:14

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

    Antwort
    0
  • StornierenAntwort