mConf [14757395258967641292]() std::map<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > >
以上是一个内存溢出的map对象,这次仅记录一下结构中的主要组成部分。
1、map容器的模板定义
template < class Key, // 指定键(key)的类型 class T, // 指定值(value)的类型 class Compare = less<Key>, // 指定排序规则 class Alloc = allocator<pair<const Key,T> > // 指定分配器对象的类型 > class map;
虽然map的模板有4个参数,但是大多数情况下只需要设置前2个参数即可,后两个参数有默认值。
2. 第一个参数 std::basic_string<char,std::char_traits<char>,std::allocator<char> >
源mConf对象定义是map<string,string>, 第一个参数是一个basic_string类模板对char类型的定义,也就是std::string类。
basic_string类模板原型:
template <class Ch, class Tr = char_traits <Ch>, class A=allocator <Ch>> class std::basic_string
{
public:
...
}
目前C++官方实现定义类型有这些:
类型 定义
std::string std::basic_string<char>
std::wstring std::basic_string<wchar_t>
std::u8string (C++20) std::basic_string<char8_t>
std::u16string (C++11) std::basic_string<char16_t>
std::u32string (C++11) std::basic_string<char32_t>
std::pmr::string (C++17) std::pmr::basic_string<char>
std::pmr::wstring (C++17) std::pmr::basic_string<wchar_t>
std::pmr::u8string (C++20) std::pmr::basic_string<char8_t>
std::pmr::u16string (C++17) std::pmr::basic_string<char16_t>
std::pmr::u32string (C++17) std::pmr::basic_string<char32_t>
当然,我们在代码中也可以定义自己的类型或自定义的类名称,例如:
typedef basic_string <char> AreYouOK;
int main(int argc, char* argv[])
{
AreYouOK testStr = "888";
printf("testStr = %s\n", testStr.c_str());
return 0;
}