// 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
被释放导致访问异常的情况。