析构函数必须带函数体吗?

如下代码:为什么析构函数必须带函数体呢?

class Student {
public:
  Student() {}
  ~Student();  // 这里必须改为 ~Student(){}; 否则报错找不到符号定义。
};

int main(){
  Student stu;
  return 0;
}

图片.png

阅读 3k
3 个回答

C++,也可以这样啊

class Student {
public:
  Student() {}
  ~Student();  // 这里必须改为 ~Student(){}; 否则报错找不到符号定义。
};

Student::~Student() { }

不过,只要不是纯虚函数,总是需要实现的,哪怕是个空实现。

class Student {
public:
  Student() {}
};

int main(){
  Student stu;
  return 0;
}

你不定义析构函数就好了啊,C++会帮你生成默认的,你无需操心。

class Student {
public:
  Student() {}
  ~Student() = delete; // 如果不想使用析构函数
        or
  ~Student() = default; //如果只想用默认的析构函数
};

int main(){
  Student stu;
  return 0;
}
推荐问题