我有一个问题找不到答案。
如果我有这样的功能:
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;
我最终会分配到无法释放的内存。 请记住,内存泄漏不好,应该避免 - 有没有办法以正确的方式做到这一点?
尝试在互联网上搜索但没有结果。
考虑创建从函数分配的指针列表,并稍后在某个地方释放它们,但这不是最好/安全的方法,因为它很容易混乱。
您可以像这样使用
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++...