C ++中“〜”(代字号)符号的含义?

时间:2011-03-17 18:21:09

标签: c++

// AirlineTicket.h

#include <string>
class AirlineTicket
{
public:
  AirlineTicket();

  ~AirlineTicket();

  int          calculatePriceInDollars();
  std::string  getPassengerName();
  void         setPassengerName(std::string inName);
  int          getNumberOfMiles();
  void         setNumberOfMiles(int inMiles);
  bool         getHasEliteSuperRewardsStatus();
  void         setHasEliteSuperRewardsStatus(bool inStatus);

 private:
   std::string  mPassengerName;
   int          mNumberOfMiles;
   bool         fHasEliteSuperRewardsStatus;
 };

我现在想要这段代码中~AirlineTicket();的含义是什么? 我不知道“〜”(代字号)的含义。

7 个答案:

答案 0 :(得分:23)

它是析构函数。 当你销毁(到达范围的末尾,或者调用delete指向对象实例的指针时)它会被调用。

答案 1 :(得分:12)

在您使用它的上下文中,它定义了一个析构函数。

其他上下文中,如下所示,它也称为按位否定(补码):

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

输出:(ideone

-101
100

答案 2 :(得分:4)

~表示它是析构函数,当对象超出范围时,会调用相应的析构函数。

调用析构函数时?

举个例子 -

#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;
}

我的系统上的结果:

Destructor called   0xbfec7942  
Destructor called   0xbfec7943

此示例仅用于指示何时调用析构函数。但是只有在类管理资源时才会编写析构函数。

当班级管理资源时?

#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;
}

我的系统上的结果:

Destructor called   0x9b68008

在程序中,你发布了我认为不需要编写析构函数。希望它有所帮助!

答案 3 :(得分:4)

这是类析构函数。您可能希望获得有关C ++开发的介绍性文本,因为析构函数是OOP中的基本概念。有一个很好的参考网站hereC++ FAQ是另一个很好的资源。

答案 4 :(得分:1)

~引入了析构函数。之所以使用它是因为(a)它可用,ad(b)~是“not”的一个(几个)数学符号。

答案 5 :(得分:1)

答案 6 :(得分:1)

~AirlineTicket();是AirlineTicket类的析构函数

请参阅this link以获取进一步的参考资料

当您删除该类的对象时,将调用析构函数,以释放分配的任何内存或对象使用的资源。