c++ - 可以使用类的析构函数内部函数来重置值吗?

标签 c++ pointers destructor

<分区>

在我的讲座中,我没有看到有人使用析构函数将值重置为起始参数,而是在函数中手动处理每个变量。在类函数中使用析构函数进行重置/删除是否会导致任何问题

我的意思的小例子:

    class Test1{
        private:
            int *test;
            bool valid;
        public:
        Test1(int value,bool valid=false){
            test=new int(value); this->valid=valid;
        }
        ~Test1(){
            delete test; test=nullptr; valid=false;
        }

    void ResetStats(int NewValue){
        this->~Test1();
        test1=new int(NewValue);
        valid=false;
    }

    }

最佳答案

调用非平凡的析构函数显式结束对象的生命周期 (why?)。

ResetStats 和析构函数放在单独的私有(private)函数中共享功能:

// Both destructor and ResetStats call Reset
~Test1(){
    Reset(nullptr);
}
void ResetStats(int NewValue) {
    Reset(new int(NewValue));
}
// Shared functionality goes here
private Reset(int *ptr) {
    delete test;
    test=ptr;
    valid=false;
}

关于c++ - 可以使用类的析构函数内部函数来重置值吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45441441/

相关文章:

c++ - 如何包装一个函数以适应另一个函数的所需类型

c - strlen 指针与数组

c++ - 编写 C++ 析构函数

c - 删除二叉搜索树

c++ boost::serialization 为类设置固定的 class_id

c++ - 应用程序级集合的适当架构

swift - 从 Swift 使用 Freeglut 时不会初始化

C++ - 接受用户输入作为函数调用

c++ - 什么 !在值之前初始化变量时做

c++ - 在析构函数中删除[]并将类对象传递给函数作为参数