См. Также: Similar questionКак вы должны возвращать * с помощью shared_ptr?
Код, очевидно, опасен. Вопрос в следующем: как вы отслеживаете ссылку на это?
using namespace boost;
// MyClass Definition
class MyClass {
public:
shared_ptr<OtherClass> createOtherClass() {
return shared_ptr<OtherClass> OtherClass(this); // baaad
}
MyClass();
~MyClass();
};
// OtherClass Definition
class OtherClass {
public:
OtherClass(const *MyClass myClass);
~OtherClass();
};
// Call; pMyClass refcount = 1
shared_ptr<MyClass> pMyClass(new MyClass());
// Call; pMyClass refcount = 1 => dangerous
pMyClass->createOtherClass();
У меня есть ответ (отправил ниже), я просто хочу, чтобы это было на StackOverflow (где каждый может исправить меня, если я ошибаюсь.)
Не знаете, почему это отклоняется .. из FAQ: Также отлично спросить и ответить на свой собственный вопрос программирования [..] –
Возможно, что нисходящий поток был из-за того, что код, который вы опубликовали в вопросе, выиграл Компиляция. – 2009-04-29 12:59:35
К сожалению, дело не в том, чтобы предоставить компилируемый код, а вместо этого, чтобы проиллюстрировать эту точку с ненужными деталями. –