首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对C++内存回收感到困惑

对C++内存回收感到困惑
EN

Stack Overflow用户
提问于 2011-07-21 02:55:39
回答 7查看 251关注 0票数 1

因此,在C++中,如果我使用new创建一个对象,我应该总是使用delete释放它

例如

代码语言:javascript
复制
Segment::Segment(float length)
{
    segmentLength = length;

    angle = 0.0f;
    x = Rand::randFloat(1.0f, 1.5f);
    y = Rand::randFloat(1.0f, 1.5f);

    vx = Rand::randFloat(0.0f, 1.0f); 
    vy = Rand::randFloat(0.0f, 1.0f);
    prevX = Rand::randFloat(0.0f, 1.0f);
    prevX = Rand::randFloat(0.0f, 1.0f);
};

假设我在另一个类中这样使用它,例如,

代码语言:javascript
复制
this._segmentObject = Segment(2.0f);
this._segmentPointer = new Segment(2.0f);

在该类的析构函数中,我知道应该在this._segmentPointer上调用delete,但是如何确保为另一个类释放内存?

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2011-07-21 02:59:25

未使用newnew[]malloc系列分配的内容应在对象超出作用域时进行析构和“释放”。

通常,这仅仅意味着代码已经到达了它所声明的块的末尾,或者它所在的对象已经被销毁(以某种方式)。

要查看实际效果,您可以执行以下操作:

代码语言:javascript
复制
struct C {
    C()  { std::cout << "C()" << std::endl; }
    ~C() { std::cout << "~C()" << std::endl; }
};

struct B {
    B()  { std::cout << "B()" << std::endl; }
    ~B() { std::cout << "~B()" << std::endl; }
private:
    C c_;
};

struct A {
    A()  { std::cout << "A()" << std::endl; }
    ~A() { std::cout << "~A()" << std::endl; }
};

int main() {
    B *b = new B; // prints "B()", also constructs the member c_ printing "C()"
    { // starts a new block
        A a; // prints "A()";
    } // end of block and a's scope, prints "~A()"

    delete b; // prints "~B()", also destructs member c_, printing "~C()"
}

注意:如果我们不使用delete b,"~B()“和"~C()”将永远不会打印出来。同样,如果c_是使用new分配的指针,则需要将其设置为delete'd才能打印"~C()“

票数 4
EN

Stack Overflow用户

发布于 2011-07-21 02:59:13

但是,我如何确保为另一个释放内存?

它是自动的。这就是为什么这种类型的存储被称为自动存储。自动存储在存储的生命周期结束时释放,并调用对象的析构函数。

当程序控制离开分配对象的作用域时,对象生命周期结束。

票数 5
EN

Stack Overflow用户

发布于 2011-07-21 03:01:00

this._segmentObject的内存是包含对象的内存的一部分,将在包含对象被销毁时释放。

this._segmentObject是从一个在堆栈上创建的临时对象分配的,当它超出作用域时将其删除。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6767005

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档