У меня есть указатель, который нарезанный, но я точно не знаю, где и почему. Есть две строки кода, которые я думаю, может привести к сплайсинга:Имеет ли разрез с unique_ptr?
Создание уникального указателя:
map.insert(make_pair("ChildA", unique_ptr<Base>(new ChildA())));
и возвращение сырой указатель из моего уникального указателя:
return map["ChildA"].get();
Отметьте, что:
- Класс ChildA наследует Основание
- Base имеет виртуальный деструктор
карту в приведенном выше примере типа:
map<string, unique_ptr<Base> >
происходят ли сплайсинг в одном из строк кода, указанных выше? Есть ли простой способ избежать, где это происходит?
Вы имели в виду 'return map [" ChildA "]. Get()' right? – WhozCraig
'return map [ChildA] .get()' недопустимый код - всегда [post REAL code] (http://stackoverflow.com/help/mcve). – Angew
IIRC, разрезание происходит только на копии объектов ценности; так что не ссылки, а не указатели (даже когда в умном указателе). Таким образом, это будет зависеть от того, что тип в сигнатуре функции, которая содержит 'return map [ChildA] .get();'. Что такое подпись и как используется результат? – Niall