How do I call the class's destructor?

后端 未结 7 1361
太阳男子
太阳男子 2020-12-10 03:52

I have a simple C++ code, but I don\'t know how to use the destructor:

class date {

public:
    int day;
    date(int m)
    {
        day =m;
    }

    ~d         


        
7条回答
  •  南笙
    南笙 (楼主)
    2020-12-10 04:18

    Only in very specific circumstances you need to call the destructor directly. By default the destructor will be called by the system when you create a variable of automatic storage and it falls out of scope or when a an object dynamically allocated with new is destroyed with delete.

    struct test {
       test( int value ) : value( value ) {}
       ~test() { std::cout << "~test: " << value << std::endl; }
       int value;
    };
    int main()
    {
       test t(1);
       test *d = new t(2);
       delete d;           // prints: ~test: 2
    }                      // prints: ~test: 1 (t falls out of scope)
    

    For completeness, (this should not be used in general) the syntax to call the destructor is similar to a method. After the destructor is run, the memory is no longer an object of that type (should be handled as raw memory):

    int main()
    {
       test t( 1 );
       t.~test();            // prints: ~test: 1
                             // after this instruction 't' is no longer a 'test' object
       new (&t) test(2);     // recreate a new test object in place
    }                        // test falls out of scope, prints: ~test: 2
    

    Note: after calling the destructor on t, that memory location is no longer a test, that is the reason for recreation of the object by means of the placement new.

提交回复
热议问题