reset函数的使用
在C++中,"reset"函数用于智能指针和一些类的成员函数,作用是重新设置对象的状态,释放原有资源并可能分配新的资源。下面分别是从智能指针和一般的类成员函数两个方面解释:
智能指针的 reset 函数:
在 C++ 中,std::shared_ptr
和 std::unique_ptr
等智能指针提供了 reset
成员函数,用于重新设置指针的状态。以下是 std::shared_ptr
和 std::unique_ptr
中的 reset
函数的用法:
void test_reset(){
std::shared_ptr<int> ptr(new int(100));
std::cout<<"Orginal nmber is: "<<*(ptr.get())<<std::endl;
ptr.reset(new int(200));
std::cout<<"Now nmber is: "<<*(ptr.get())<<std::endl;
}
// 输出
// Orginal nmber is: 100
// Now nmber is: 200
主要作用就是管理动态分配的资源,避免内存泄漏。
一般类成员函数的 reset:
有些类也提供了名为 reset
的成员函数,通常用于重置类的内部状态或释放资源。这个 reset
的具体实现和作用取决于类的设计。
class MyClass {
public:
MyClass(int value) : data(value) {}
void reset(int value) {
data = value;
}
void print() {
std::cout << "Data: " << data << std::endl;
}
private:
int data;
};
void test_class_reset(){
MyClass obj(42);
obj.print();
obj.reset(100);
obj.print();
}
// 输出
// Data: 42
// Data: 100
主要作用是重置对象的内部状态,有利于不创建新对象的情况下改变对象的状态。
此外,reset函数还有一个重要的作用:释放资源
reset()
函数的默认行为是将 shared_ptr
持有的对象释放,并将 shared_ptr
重置为空指针。如果 reset()
不带参数,它将释放当前 shared_ptr
持有的对象,并将其重置为 nullptr
。