小编pon*_*tus的帖子

当超出范围时,局部变量删除另一个变量的内存

在设计一个动态分配内存的类时,我遇到了有关内存分配的以下问题.我希望你们中的一些人能够指出我如何以更好的方式设计课程.我的类动态分配内存,因此也在析构函数中删除它.

为了说明问题,请考虑以下愚蠢的类声明:

class testClass{
    int* data;
public:
    testClass(){
        data = new int;
        *data = 5;
    }
    ~testClass(){
        delete data;
    }
};
Run Code Online (Sandbox Code Playgroud)

到现在为止还挺好.现在假设我在main中创建了其中一个对象

int main(){
    testClass myObject;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

当然还没有问题.但是,假设我现在编写一个函数,它将一个testClass对象作为输入并从main调用它.

void doNoting(testClass copyOfMyObject){
    //do nothing
}
int main(){
    testClass myObject;
    doNothing(myObject);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

这一次,该函数创建了一个局部变量copyOfMyObject,它只是myObject的一个副本.然后,当到达该函数的末尾时,该本地对象自动调用其析构函数,该析构函数删除其数据指针指向的内存.但是,由于这是myObject的数据指针指向的相同内存,myObject无意中在进程中删除了其内存.我的问题是:什么是设计课程的更好方法?

c++ destructor local-variables

4
推荐指数
1
解决办法
324
查看次数

标签 统计

c++ ×1

destructor ×1

local-variables ×1