如果我在析构函数中创建一个对象,会发生什么
if i create an object in destructor, what will happen?
#include <iostream>
using namespace std;
class teacher{
private:
int Tnum;
public:
teacher(){
Tnum = 0;
}
teacher(int n){
cout << "creating teacher"<<endl;
Tnum = n;
}
~teacher(){
cout << "destroying teacher" << endl;
}
};
class student: public teacher{
private:
int Snum;
public:
student(){
Snum =0;
}
student(int n){
cout << " creating student"<<endl;
Snum = n;
}
~student(){
cout << "destroying student"<<endl;
teacher t(1);
cout << "teacher created"<<endl;
}
};
int main(){
teacher t(20);
student s(30);
}
您展示了一个编译示例。会发生什么?
它的行为就像在任何其他函数中创建的对象一样,一旦超出范围就会被销毁。
从 12.4p8 我们发现:
在执行析构函数的主体并销毁在主体内分配的任何自动对象 [...]
这证实了在析构函数的主体中创建对象是合法的。
但是,要小心!如果这些对象的构造函数引发异常,可能会伤害您,因为析构函数不会引发异常,遇到异常将导致应用程序终止。
相关文章:
- 为什么我不能将一个对象push_back到属于另一个类的对象向量中?
- 在他自己的方法中,有可能将一个对象取消引用到另一个对象吗
- 从多个源构造一个对象,包括一个对象向量
- 为什么C++在将一个对象复制到另一个对象时需要对这两个对象进行低级常量限定
- 检查哪个对象调用了另一个对象的对象方法
- C++ 如何在将新对象分配给另一个对象时创建新对象
- 如何处理从一个对象传递到另一个在C++中具有公共抽象类的对象的消息
- 如果您为类的一个对象动态分配内存作为参数,会发生什么
- 一个对象什么时候可以有非零大小的一个,但不能同时具有一个或多个字节的存储
- 在C++中,当没有为类声明构造函数时,如果我用参数构造一个对象会发生什么
- 在c++中存储一个对象或不存储对象的首选方式是什么
- 如果我在析构函数中创建一个对象,会发生什么
- 一个什么都不做的函数可以改变一个对象吗?
- 当一个没有参数的成员函数被c++中的一个对象调用时会发生什么
- 如果我们声明一个对象并将其分配给同一类的另一个对象会发生什么
- 当我们把指针从一个对象复制到同一类的另一个对象时,我们到底想要什么
- 作为一个对象存储在内存中意味着什么
- 当一个对象在复制构造函数或赋值运算符中未初始化时会发生什么
- 定义一个对象有什么区别;s成员的值、指针或引用
- 在c++中,两个线程/对象在一个对象集合中可以安全地做什么?