C++ 中的 new/delete、构造/析构函数和 dynamic_cast 是面向对象编程中非常重要的概念。本攻略将为你详细讲解这三个概念的含义和用法。
new/delete
在 C++ 中,new 和 delete 是动态内存分配和释放运算符。new 运算符用于分配动态内存,delete 运算符用于释放动态内存。它们可以用于任意类型的数据。
示例说明
int *p = new int(10);
delete p;
上面的示例中,我们使用 new 运算符动态分配了一个 int 类型的变量,然后使用 delete 运算符释放了它所占的内存空间。
构造/析构函数
在 C++ 中,构造函数用于初始化对象的数据成员,析构函数用于清理对象使用的资源。在程序运行期间,当对象被创建时构造函数会自动调用,当对象被销毁时析构函数会自动调用。
示例说明
#include <iostream>
using namespace std;
class MyClass {
public:
MyClass() {
cout << "Constructing MyClass..." << endl;
}
~MyClass() {
cout << "Destructing MyClass..." << endl;
}
};
int main() {
MyClass obj;
return 0;
}
上面的示例中,我们定义了一个 MyClass 类,并在其中定义了构造函数和析构函数。在 main 函数中创建 MyClass 的一个对象,当对象被创建时构造函数会自动调用,当对象被销毁时析构函数会自动调用。
dynamic_cast
在 C++ 中,dynamic_cast 是一种运行时类型识别操作符。它可以用于将一个基类对象转换为其派生类对象的指针或引用。使用 dynamic_cast 转换时,会在运行时检查类型信息,如果类型不一致会返回 null 指针或抛出 bad_cast 异常。
示例说明
#include <iostream>
using namespace std;
class Base {
public:
virtual void print() {
cout << "This is Base." << endl;
}
};
class Derived : public Base {
public:
void print() {
cout << "This is Derived." << endl;
}
};
int main() {
Base *p = new Derived;
Derived *dp = dynamic_cast<Derived*>(p);
if (dp != NULL) {
dp->print();
} else {
cout << "Cast failed!" << endl;
}
delete p;
return 0;
}
上面的示例中,我们定义了一个基类 Base 和一个派生类 Derived。在 main 函数中,我们创建了一个 Derived 类的对象,并将它赋值给一个 Base 类型的指针。然后我们使用 dynamic_cast 将这个指针转换为 Derived 类型的指针。由于转换成功,我们可以调用 Derived 类的成员函数 print,输出 "This is Derived."。最后我们删除了创建的对象。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C++中的new/delete、构造/析构函数、dynamic_cast分析 - Python技术站