Saya punya kode sederhana.

#include <iostream>

struct BABE
{
    std::string* babe = nullptr;

    BABE(const char* str)
    {
        babe = new std::string(str);
    }
    ~BABE()
    {
        delete babe;
    }
};

int main()
{
    BABE bomb = "hello";
    bomb = "world";
    
    system("pause");
    return 0;
}

Saat aku mencoba

bomb = "world";

Itu ditetapkan dengan baik, tetapi kemudian destructor memanggil.

Mengapa itu terjadi?


bbb

0
bone_appettit 13 Mei 2021, 21:07

1 menjawab

Jawaban Terbaik

Mengapa itu terjadi?

Karena di baris ini:

bomb = "world";

Untuk menetapkan const char * ke kelas Anda, sementara struct BABE dibuat, sementara itu ditugaskan ke bomb (menggunakan operator penugasan yang dihasilkan oleh kompiler), dan kemudian sementara itu dimusnahkan .

Karena Anda melanggar Aturan 3/5/0, tugas mengarah ke bencana - kebocoran memori dan penghapusan ganda dari pointer yang sama.

4
Remy Lebeau 13 Mei 2021, 21:56