(으)로 구성되었습니다. std::map
에 클래스의 모든 개체를 추가하고 싶습니다. 내가 객체를 복사하지 않기 때문에,이 같은 스마트 포인터를 사용하여 해결 방법을 얻으려고 :std :: shared_ptr이 (가)
Class.h을
class A : public std::enable_shared_from_this<A> {
public:
A();
~A();
static std::map<uint32_t, std::shared_ptr<A>> getObjects();
private:
static uint32_t counter;
uint32_t id;
static std::map<uint32_t, std::shared_ptr<A>> objects;
};
Class.cpp
A::A()
{
id = counter++;
std::shared_ptr<A> ptr = std::make_shared<A>();
objects[id] = ptr->shared_from_this();
}
A::~A()
{
objects.erase(id);
}
std::map<uint32_t, std::shared_ptr<A>> A::getObjects()
{
return objects;
}
uint32_t A::counter=0;
std::map<uint32_t, std::shared_ptr<A>> A::objects;
이것은 잘 컴파일되지만 이것을 사용하려고 할 때
int main(){
A a;
A b;
auto objects = A::getObjects();
}
내가 얻을 분할 오류
: 11`
내가
A::A()
{
id = counter++;
std::shared_ptr<A> ptr(this);
objects[id] = ptr->shared_from_this();
}
에 생성자를 변경하려고하면 포인터가 해제되고
할당되지 않은 내가 얻을
기본적으로 std::shared_ptr<A>
을 this
에서 생성해야하지만 작동시키지 못합니다.
[this] (http://en.cppreference.com/w/cpp/memory/enable_shared_from_this/shared_from_this)을 위반하는 것 같습니다 : * 이전에 공유 된 객체에만'shared_from_this'를 호출 할 수 있습니다 즉,'std :: shared_ptr'에 의해 관리되는 객체에 대해서. * – chris
이것을 원한다면'A' 형의 객체 만 shared_ptr로 할당해야합니다 – Justin