C++(reset())

发布时间 2023-12-14 20:15:03作者: 做梦当财神

在 C++ 中,reset() 可能指的是不同的概念,具体取决于上下文。以下是三个常见的用法:

1. std::shared_ptr::reset()

在 C++ 中,std::shared_ptr 是用于管理共享所有权的智能指针,reset()std::shared_ptr 提供的一个成员函数。这个函数的作用是将 std::shared_ptr 重新指向新的资源或者置空。如果 std::shared_ptr 不再管理任何资源,它将被置为空。

#include <memory>
#include <iostream>

int main() {
    std::shared_ptr<int> ptr = std::make_shared<int>(42);

    // reset 指向新的资源
    ptr.reset(new int(100));

    // 输出新的值
    std::cout << *ptr << std::endl;

    // reset 置空 shared_ptr
    ptr.reset();

    // 检查 shared_ptr 是否为空
    if (!ptr) {
        std::cout << "shared_ptr is empty." << std::endl;
    }

    return 0;
}
100
shared_ptr is empty.

在这个例子中,ptr.reset(new int(100)) 使 ptr 不再指向原始的 int 资源,而是指向一个新的动态分配的 int

2. std::unique_ptr::reset()

std::unique_ptr 是用于独占所有权的智能指针,也提供了 reset() 函数。它的行为与 std::shared_ptr 中的类似,但由于 std::unique_ptr 的特性,它不会共享所有权。

#include <memory>
#include <iostream>

int main() {
    std::unique_ptr<int> ptr = std::make_unique<int>(42);

    // reset 指向新的资源
    ptr.reset(new int(100));

    // 输出新的值
    std::cout << *ptr << std::endl;

    // reset 置空 unique_ptr
    ptr.reset();

    // 检查 unique_ptr 是否为空
    if (!ptr) {
        std::cout << "unique_ptr is empty." << std::endl;
    }

    return 0;
}
100
unique_ptr is empty.

这个例子中的 ptr.reset(new int(100)) 同样使 ptr 不再指向原始的 int 资源,而是指向一个新的动态分配的 int

3. std::vector

#include <iostream>
#include <vector>

int main() {
    std::vector<int> vec = {1, 2, 3, 4, 5};
    std::cout << vec.size() << std::endl;  // 输出 5

    vec.clear();  // 使用clear()函数清空vector中的元素
    std::cout << vec.size() << std::endl;  // 输出 0

    return 0;
}

在这个例子中,clear()函数用于清空 vector 中的所有元素,实现了reset的效果,但是在STL中并没有名为reset()的函数。

总的来说,reset()函数在 C++ 中的具体用法取决于具体的类或对象,但通常用于清除对象的内容或重置对象的状态。