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

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

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

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

图片.png

阅读 2.9k
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;
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题