// tcharTest.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <Windows.h>
#include <iostream>
#include <list>
#include <tchar.h>
void SetList(std::list<TCHAR*>& _list)
{
_list.push_back(_T("ref1"));
_list.push_back(_T("ref2"));
_list.push_back(_T("ref3"));
_list.push_back(_T("ref4"));
_list.push_back(_T("ref5"));
for (auto it1 = _list.begin(); it1!= _list.end(); ++it1)
{
std::cout<<_T("set list function: ")<<*it1<<std::endl;
}
}
std::list<TCHAR*> ReturnList()
{
std::list<TCHAR*> list;
list.push_back(_T("return1"));
list.push_back(_T("return2"));
list.push_back(_T("return3"));
list.push_back(_T("return4"));
list.push_back(_T("return5"));
for (auto it2 = list.begin(); it2!= list.end(); ++it2)
{
std::cout<<_T("return_list function: ")<<*it2<<std::endl;
}
return list;
}
int _tmain(int argc, _TCHAR* argv[])
{
//引用
std::list<TCHAR*> ref_list;
SetList(ref_list);
printf("\n");
for (auto it1 = ref_list.begin(); it1!= ref_list.end(); ++it1)
{
std::cout<<_T("set list main: ")<<*it1<<std::endl;
}
printf("\n");
//返回值
std::list<TCHAR*> return_list;
return_list = ReturnList();
printf("\n");
for (auto it2 = return_list.begin(); it2!= return_list.end(); ++it2)
{
std::cout<<_T("return list main")<<*it2<<std::endl;
}
system("pause");
return 0;
}
std::list<TCHAR> ReturnList() 出栈后访问list是否可能出现THCAR被释放导致访问异常? 两个函数放的TCHAR* ,用完这个list后需要list.clear()吗?
在给定的代码中,ReturnList 函数返回的是 std::list<TCHAR*> 类型,而不是 std::list<TCHAR> 类型。因此,栈上的 TCHAR 不会被释放,也不会导致访问异常。
在 SetList 函数中,传递的是引用 _list,因此在 main 函数中对 ref_list 进行迭代时,引用的 _list 仍然有效,不需要手动清空。同样地,在 ReturnList 函数中,返回的 std::list<TCHAR*> 类型的副本会在 main 函数中赋值给 return_list,所以在函数结束后,return_list 拥有自己的副本,也不需要手动清空。
总结起来,给定的代码中不需要手动清空 std::list,因为不会出现 TCHAR 被释放导致访问异常的情况。