Начните с кода:
#include <iostream>
#include <string>
#include <map>
#include <boost/asio.hpp>
typedef std::map<boost::asio::ip::address, int> Ip2Int;
Ip2Int ip2int;
void
func1()
{
boost::asio::ip::address addr4 = boost::asio::ip::address::from_string("192.168.2.1");
boost::asio::ip::address addr6 = boost::asio::ip::address::from_string("de::ad");
ip2int.insert(std::pair<boost::asio::ip::address, int>(addr4, 1));
ip2int.insert(std::pair<boost::asio::ip::address, int>(addr6, 2));
}
int
main()
{
func1();
Ip2Int::iterator iter = ip2int.begin();
do {
std::cout << iter->first << " -> " << iter->second << std::endl;
} while (++iter != ip2int.end());
return 0;
}
Я изучаю C ++, и приведенный выше фрагмент кода сбил меня с толку. В func1 распределение addr4 и addr6 является выделением стека (верно?). Когда func1 существует, они должны быть удалены (-ish, память будет хранить значение, пока что-то еще не использует его). Первоначально это заставило меня думать, что моя прогулка по карте ip2int может напечатать мусор. Я так и не смог этого добиться.
Поскольку я все еще новичок в C ++, я не исключаю, что что-то упустил. Случается ли копия где-то, о чем я не знаю? Я думал, что и пара, и вызовы вставки карты просто делают ссылки. Что должно означать, что они могут относиться к мусору в какой-то момент.
Окей, хватит болтать. Является ли приведенный выше код каким-то образом верным или мне просто повезло, и больше ничего не приходит, чтобы использовать память, в которой хранились адреса addr4 и addr6?
спасибо заранее за любую помощь