delete函数例程
时间: 2023-08-02 17:07:21 浏览: 49
以下是一个使用delete函数释放动态分配内存的例程:
```c++
#include <iostream>
using namespace std;
int main() {
// 动态分配一个整数数组
int* arr = new int[5];
// 对数组进行赋值
for (int i = 0; i < 5; i++) {
arr[i] = i;
}
// 输出数组的内容
for (int i = 0; i < 5; i++) {
cout << arr[i] << " ";
}
cout << endl;
// 释放数组的内存空间
delete[] arr;
arr = NULL;
return 0;
}
```
这个例程首先使用new运算符动态分配了一个包含5个整数的数组。然后对数组进行赋值并输出其内容。最后使用delete[]运算符释放数组的内存空间,并将指针设置为NULL。注意,在释放内存后不要再使用已经释放的指针。
相关问题
shared_ptr 例程
shared_ptr是C++标准库中的智能指针之一,用于管理动态分配的内存资源。它提供了自动的内存管理和资源释放,可以避免内存泄漏和悬空指针的问题。
下面是一个shared_ptr的例程:
```cpp
#include <iostream>
#include <memory>
class MyClass {
public:
MyClass() {
std::cout << "MyClass constructor" << std::endl;
}
~MyClass() {
std::cout << "MyClass destructor" << std::endl;
}
void doSomething() {
std::cout << "Doing something..." << std::endl;
}
};
int main() {
// 创建一个shared_ptr对象,指向一个MyClass对象
std::shared_ptr<MyClass> ptr(new MyClass());
// 使用shared_ptr对象调用成员函数
ptr->doSomething();
// shared_ptr会在不再需要时自动释放内存资源,无需手动delete
return 0;
}
```
在上面的例程中,我们首先创建了一个shared_ptr对象`ptr`,并通过`new`关键字动态分配了一个MyClass对象,并将其地址传递给shared_ptr。当我们使用`ptr`调用成员函数`doSomething()`时,它会像普通指针一样访问MyClass对象的成员函数。
当程序执行完毕时,shared_ptr会自动释放内存资源,调用MyClass对象的析构函数进行清理工作。
dynamic_cast 使用例程
dynamic_cast 是 C++ 中的一个类型转换运算符,用于将一个指针或引用转换为另一个类的指针或引用。
下面是一个 dynamic_cast 的使用例程:
```c++
#include <iostream>
using namespace std;
class Base {
public:
virtual void print() {
cout << "This is a base class." << endl;
}
};
class Derived : public Base {
public:
virtual void print() {
cout << "This is a derived class." << endl;
}
};
int main() {
Base *base = new Base();
Derived *derived = dynamic_cast<Derived*>(base);
if (derived == nullptr) {
cout << "Cast failed." << endl;
} else {
cout << "Cast successful." << endl;
derived->print();
}
delete base;
return 0;
}
```
在这个例程中,我们定义了一个基类 Base 和一个派生类 Derived。在 main 函数中,我们创建了一个 Base 类的对象 base,并尝试将其转换为 Derived 类的指针 derived,使用了 dynamic_cast 运算符。由于 base 对象实际上不是 Derived 类型的对象,因此 dynamic_cast 操作失败,返回一个空指针。我们在 if 语句中检查 derived 指针是否为空,如果为空,说明转换失败;否则,我们可以通过 derived 指针调用 Derived 类中的函数 print()。
需要注意的是,dynamic_cast 运算符只能用于指向类的指针或引用,并且只能用于在运行时进行类型检查的类之间的转换。由于 dynamic_cast 运算符需要在运行时进行类型检查,因此会带来一定的运行时开销,应该谨慎使用。