释放从c++中的函数返回的已分配内存

问题描述 投票:0回答:1

我有一个问题找不到答案。

如果我有这样的功能:

char* f1(char ch, int len) { 
    char* s1=new char[len+1); 
    for(int i; i<len; i++) s1[i]=ch; 
    s1[len]=0; 
}

我这样称呼它:

char* str;
str=f1("A", 10);
std:cout << "Something " << str << std::endl;
delete[] str;

一切都好,但如果我想像这样使用它更短:

std:cout << "Something " << f1("A", 10) << std::endl;

我最终会分配到无法释放的内存。 请记住,内存泄漏不好,应该避免 - 有没有办法以正确的方式做到这一点?

尝试在互联网上搜索但没有结果。

考虑创建从函数分配的指针列表,并稍后在某个地方释放它们,但这不是最好/安全的方法,因为它很容易混乱。

c++ memory-management memory-leaks
1个回答
0
投票

您可以像这样使用

std::unique_ptr

#include <memory>
#include <iostream>

typedef std::unique_ptr<char[]> MyPtr;

MyPtr f1(char ch, int len) {
    MyPtr s1(new char[len+1]);
    for(int i=0; i<len; i++) s1[i]=ch;
    s1[len]=0;
    return s1;
}

int main()
{
    std::cout << "Something " << f1('A', 10).get() << std::endl;
}

当然,归根结底,您应该只使用

std::string
——毕竟,您使用的是 C++...

© www.soinside.com 2019 - 2024. All rights reserved.