Здравствуйте, niXman, Вы писали:
X>есть объект shared_ptr. этому объекту я устанавливаю свой delete`ер.
X>внимание вопрос: счетчик ссылок этого shared_ptr`а изменяется в момент входа в delete`ер, или в момент выхода?
Счетчик — это деталь реализации умного указателя, верить в его существование, конечно, можно, но полагаться не стоит (c). Я так понимаю, вопрос в том, можно ли внутри делетера восстановить экземпляр shared_ptr'а удаляемого объекта? Здравый смысл и несложный эксперимент подсказывают, что нет:
http://ideone.com/IIw8FU#sthash.dANBEuoG.eurfLEHz.dpuf
#include <iostream>
#include <memory>
int main()
{
std::weak_ptr<int> weakPtr;
auto deleter = [&](int* targetPtr)
{
std::cout
<< "- Can we restore a shared pointer in its deleter?\n"
<< "- " << (weakPtr.lock().get() ? "Yes." : "No.") << std::endl;
delete targetPtr;
};
std::shared_ptr<int> sharedPtr(new int(), deleter);
weakPtr = sharedPtr;
std::cout
<< "- Has the shared pointer been created?\n"
<< "- " << (weakPtr.lock().get() ? "Yes." : "No.") << std::endl;
}
Output:
- Has the shared pointer been created?
- Yes.
- Can we restore a shared pointer in its deleter?
- No.