重新'new' TCHAR* 数组
Re-'new' TCHAR* array
TCHAR* 数组的重新new 会有negative/undefined 效果吗?或者甚至可能不推荐?到目前为止,下面的代码一直运行良好。需要投入。谢谢!
//e.g.
TCHAR *tc1 = new TCHAR[1];
// later:
//resize TCHARs
tc1 = new TCHAR[size1];
tc1[size1] = { L'[=11=]' };
这是内存泄漏。您需要 delete
由 new
调用创建的任何内容。如果你这样做,一切都很好:
//e.g.
TCHAR *tc1 = new TCHAR[1];
// later:
//resize TCHARs
delete [] tc1;
tc1 = new TCHAR[size1];
tc1[size1] = { L'[=10=]' };
尽管在一个不相关的注释中,您的最后一行写在您分配的数组后面。那是 不 好。但这与您的内存分配无关,它本身就是一个错误。
如果使用字符串 class,可以避免很多这样的情况。 std::string
或者如果您使用的是 MFC,CString
.
"re-newing" 的负面影响是您丢失了指向最初分配的自由存储内存的指针。它将在您程序的其余部分一直被占用,没有任何机会回收它。
当然,您可能有一些其他指针指向内存,但那将是一段非常奇怪且不必要的复杂代码。
通过使用 std::vector
而不是 new[]
来避免所有这些问题。
tc1 = new TCHAR[size1];
tc1[size1] = { L'[=10=]' };
除了内存泄漏,这是未定义的行为,因为 size1
是最后一个有效索引之后的一个。
这是一个 std::vector
示例:
std::vector<TCHAR> tc1(1);
// later:
//resize TCHARs
tc1.resize(size1);
tc1[size1 - 1] = L'[=11=]';
也许 std::string
或 std::wstring
就足以满足您的需求。
TCHAR* 数组的重新new 会有negative/undefined 效果吗?或者甚至可能不推荐?到目前为止,下面的代码一直运行良好。需要投入。谢谢!
//e.g.
TCHAR *tc1 = new TCHAR[1];
// later:
//resize TCHARs
tc1 = new TCHAR[size1];
tc1[size1] = { L'[=11=]' };
这是内存泄漏。您需要 delete
由 new
调用创建的任何内容。如果你这样做,一切都很好:
//e.g.
TCHAR *tc1 = new TCHAR[1];
// later:
//resize TCHARs
delete [] tc1;
tc1 = new TCHAR[size1];
tc1[size1] = { L'[=10=]' };
尽管在一个不相关的注释中,您的最后一行写在您分配的数组后面。那是 不 好。但这与您的内存分配无关,它本身就是一个错误。
如果使用字符串 class,可以避免很多这样的情况。 std::string
或者如果您使用的是 MFC,CString
.
"re-newing" 的负面影响是您丢失了指向最初分配的自由存储内存的指针。它将在您程序的其余部分一直被占用,没有任何机会回收它。
当然,您可能有一些其他指针指向内存,但那将是一段非常奇怪且不必要的复杂代码。
通过使用 std::vector
而不是 new[]
来避免所有这些问题。
tc1 = new TCHAR[size1]; tc1[size1] = { L'[=10=]' };
除了内存泄漏,这是未定义的行为,因为 size1
是最后一个有效索引之后的一个。
这是一个 std::vector
示例:
std::vector<TCHAR> tc1(1);
// later:
//resize TCHARs
tc1.resize(size1);
tc1[size1 - 1] = L'[=11=]';
也许 std::string
或 std::wstring
就足以满足您的需求。