gpt4 book ai didi

c++ - 使用引用而不是指针可以解决 C++ 中的内存泄漏问题吗?

转载 作者:可可西里 更新时间:2023-11-01 16:29:23 29 4
gpt4 key购买 nike

大多数内存泄漏发生在返回对象指针而程序员忘记删除它时。

例如:

class my_class
{
...
};

my_class* func1()
{
my_class* c = new my_class;
return c;
}

int main()
{
my_class* var1 = func1();
...
// Programmer forgot delete the var1: delete var1;
// -- or --
// Doesn't know 'delete[] var1;' is correct or 'delete var1;'.
}

当指向对象的指针创建而程序员忘记删除它时,会出现一些内存泄漏。

例如:

class my_class
{
...
};

void func2(my_class* p)
{
...
}

int main()
{
my_class* var3 = new my_class;

func2(var3);

// Does func2 deletes var3? Programmer doesn't know.
// -- or --
// Programmer forgot delete the var3.
}

我使用一种方法来解决内存泄漏,但在复杂情况下我不确定。

我的方法是:不使用任何指针(一处除外),只使用引用而不是指针。

例如:

class my_class
{
...
};

my_class& func1()
{
my_class* c = new my_class; // except one place.
return *c;
}

void func2(my_class& p)
{
...
}

int main()
{
my_class& var1 = func1();
my_class var2 = func1();

my_class var3;
func2(var3);

// There is nothing to forget.
}

使用引用而不是指针是否可以解决内存泄漏问题?

这是解决内存泄漏的好方法还是有更好的方法?


编辑:

这个问题的一些答案不同意下面的代码没有内存泄漏。

因为是新问题,所以分开问。

class my_class
{
...
};

my_class& func()
{
my_class* c = new my_class;
return *c;
}

int main()
{
my_class& var1 = func();

// I think there is no memory leak.
}

我在这里问: Does this code leak memory? (references, new, but no delete)

最佳答案

您还没有解决任何内存泄漏问题。如果你是新的,那么你必须删除。您所做的只是取消引用指针,它仍然需要删除。您可以通过创建本地对象并按值返回或使用智能指针来解决内存泄漏。 100 次中有 99 次,我更喜欢按值(value)返回选项。

现在,像许多初学者一样,按值返回大型对象的想法可能会让您以性能为中心的想法感到害怕。阅读this消除你的恐惧。

关于c++ - 使用引用而不是指针可以解决 C++ 中的内存泄漏问题吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6783939/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com