开发者

Meaning of "~" (tilde) symbol in C++?

开发者 https://www.devze.com 2023-02-17 07:03 出处:网络
// AirlineTicket.h class AirlineTicket { public: AirlineTicket(); ~AirlineTicket(); i开发者_StackOverflow中文版ntgetNumberOfMiles();
// AirlineTicket.h

class AirlineTicket
{
public:
  AirlineTicket();

  ~AirlineTicket();
     
  i开发者_StackOverflow中文版nt          getNumberOfMiles();
    
private:
  int          mNumberOfMiles;
};

I want now what is the meaning of ~AirlineTicket(); in this code? I don't know the meaning of ~ (tilde).


It is the destructor. It gets called when you destroy (reaching end of scope, or calling delete to a pointer to) the instance of the object.


In the context you're using it, it defines a destructor.

In other context such as the following one, it's also called bitwise negation (complement):

int a = ~100;
int b = ~a;

Output: (ideone)

-101
100


~ signs that it is a destructor and when ever the object goes out of scope, corresponding destructor is called.

When the destructor is called ?

Taking an example -

#include <iostream> 
class foo
{
    public:
    void checkDestructorCall() ;
    ~foo();
};

void foo::checkDestructorCall()
{
    foo objOne;   // objOne goes out of scope because of being a locally created object upon return of checkDestructorCall
}

foo:: ~foo()
{
    std::cout << "Destructor called \t" << this << "\n";
}

int main()
{
    foo obj;    // obj goes of scope upon return of main
    obj.checkDestructorCall();
    return 0;
}

Results on my system:

Destructor called   0xbfec7942  
Destructor called   0xbfec7943

This example just serves to indicate when a destructor is called. But destructor is written only when the class manages resources.

When class manages resources?

#include <iostream> 
class foo
{

    int *ptr;

    public:
    foo() ; // Constructor
    ~foo() ;

};

foo:: foo()
{
     ptr = new int ; // ptr is managing resources.
                     // This assignment can be modified to take place in initializer lists too.
}

foo:: ~foo()
{
    std::cout << "Destructor called \t" << this << "\n";
    delete ptr ; // Returning back the resources acquired from the free store.
                 // If this isn't done, program gives memory leaks.
}

int main()
{
    foo *obj = new foo;
    // obj is pointing to resources acquired from free store. Or the object it is pointing to lies on heap. So, we need to explicitly call delete on the pointer object.

    delete obj ;  // Calls the ~foo
    return 0;
}

Results on my system:

Destructor called   0x9b68008

And in the program, you posted I don't see a need to write destructor. Hope it helps !


It's the class destructor. You might want to pick up an introductory text on C++ development, as destructors are a fundamental concept in OOP. There is a good reference site here, and the C++ FAQ is another good resource.


~AirlineTicket(); is the destructor for the class AirlineTicket

see this link for further reference

The destructor is called when you delete the object of that class, to free any memory allocated or resources being used by the object.


~ introduces a destructor. It's used because (a) it was available, ad (b) ~ is one (of several) mathematical notation for "not".


This indicates destructor of class.

http://publib.boulder.ibm.com/infocenter/comphelp/v8v101/index.jsp?topic=%2Fcom.ibm.xlcpp8a.doc%2Flanguage%2Fref%2Fcplr380.htm

0

精彩评论

暂无评论...
验证码 换一张
取 消