我有一个将相对路径(例如“log\crash.txt”)转换为完整路径(例如“E:\Program\log\crash.txt”)的函数。功能是:
string_t GetAbsPath(string_t relPath)
{
char abs[1024];
//Get the working directory
GetCurrentDirectory(1024, abs);
#pragma warning(disable:4996)
//Add a slash and content folder
memcpy(&abs, strcat(abs, "\\content\\"), 1024);
//Append it to the relative path
memcpy(&abs, strcat(abs, relPath.c_str()), 1024);
#pragma warning(default:4996)
return abs;
}
string_t
是我写的一个类,它基本上是一个const char*
. 我的问题是,(我有点预料到......)是当函数返回时,abs
超出范围,并且string_t
获得返回值的现在是空/垃圾。在这种情况下,我通常只是将memcpy
其复制到不会超出范围的指针中。但是存在的问题是,该指针(将是const char*
in string_t
)需要被delete[]
'd'。string_t
一开始就没有析构函数。我可以delete[]
在那里写一个,但这会带来另一个问题:
如果我创建一个string_t
这样的:
string_t crash = "New[] isn't called! Ahh!";
当我delete[]
在析构函数中访问它时,程序将崩溃,因为从未调用过 new[]。
我可以delete[]
在const char*
调用的函数中GetAbsPath
,像这样:
void LoadModel(string_t relPath)
{
string_t fullPath = GetAbsPath(relPath);
. . .
delete[] fullPath.c_str();
}
但我知道,如果我稍后再看代码,我会说“为什么delete[]
会有那个”,或者我会在不需要时添加它......而且指针是,有很多那里有错误的余地。
我能做些什么来保持这个字符在范围内(我猜这只能用指针来完成),并确保分配的内存被清理?必须有一种方法,因为 std::string 保持一切干净,并且它具有连接等功能,我string_t
什至没有。我很感激这里的任何帮助,因为我不知所措......