std::shared_ptr<Object> p1 = std::make_shared<Object>("foo"); std::shared_ptr<Object> p2(new Object("foo")); 많은 Google 및 stackoverflow 게시물이 여기에 있지만 make_shared직접 사용하는 것보다 더 효율적인 이유를 이해할 수 없습니다 shared_ptr. 누군가 make_shared가 얼마나 효율적 인지 이해할 수 있도록 객체가 생성되고 작업이 수행되는 단계별 순서를 설명 할 수 있습니까 ? 위의 예를 참조로 제공했습니다.
함수가 shared_ptr(부스트 또는 C ++ 11 STL에서) 가져 가면 전달합니까? const 참조로 : void foo(const shared_ptr<T>& p) 또는 값으로 : void foo(shared_ptr<T> p)? 나는 그것이 더 빠를 것이라고 생각하기 때문에 첫 번째 방법을 선호합니다. 그러나 이것이 실제로 가치가 있습니까? 아니면 추가 문제가 있습니까? 선택해야 할 이유를 알려 주시거나 문제가 해결되지 …
에 관한 작은 쿼리 shared_ptr입니다. shared_ptr배열을 가리키는 것을 사용하는 것이 좋습니다 ? 예를 들어 shared_ptr<int> sp(new int[10]); 그렇지 않다면 왜 안됩니까? 내가 이미 알고있는 한 가지 이유는를 늘리거나 줄일 수 없기 때문 shared_ptr입니다. 따라서 배열에 대한 일반적인 포인터처럼 사용할 수 없습니다.
C ++ 11의 클래스 멤버로 스마트 포인터의 사용법을 이해하는 데 문제가 있습니다. 나는 스마트 포인터에 대해 많이 읽었으며 나는 방법을 이해하는 것 같아요 unique_ptr및 shared_ptr/ weak_ptr일반적으로 작업을. 내가 이해하지 못하는 것은 실제 사용법입니다. 모든 사람들 unique_ptr이 거의 항상가는 길로 사용 하는 것이 좋습니다 . 그러나 어떻게 이런 식으로 구현할 것입니까? …
Clang 소스 코드를 살펴본 결과이 스 니펫을 발견했습니다. void CompilerInstance::setInvocation( std::shared_ptr<CompilerInvocation> Value) { Invocation = std::move(Value); } 왜 내가 원하는 것 ?std::movestd::shared_ptr 공유 리소스에 대한 소유권을 이전 할 수 있습니까? 왜 대신 대신이 작업을 수행하지 않습니까? void CompilerInstance::setInvocation( std::shared_ptr<CompilerInvocation> Value) { Invocation = Value; }
종료시 임의 정리를 수행하기 위해 std :: shared_ptr을 사용하는 코드가 있습니다. 처음에는이 코드가 작동하지 않을 것이라고 생각했지만 다음을 시도했습니다. #include <memory> #include <iostream> #include <vector> class test { public: test() { std::cout << "Test created" << std::endl; } ~test() { std::cout << "Test destroyed" << std::endl; } }; int main() …
를 사용하여 작업해야하는 함수가있는 경우 shared_ptr참조를 전달하는 것이 더 효율적이지 shared_ptr않습니까 (객체 복사를 방지하기 위해 )? 가능한 나쁜 부작용은 무엇입니까? 두 가지 가능한 경우를 생각합니다. 1) 함수 내부에서 다음과 같이 인수로 복사본이 만들어집니다. ClassA::take_copy_of_sp(boost::shared_ptr<foo> &sp) { ... m_sp_member=sp; //This will copy the object, incrementing refcount ... } 2) 함수 내에서 …
다음과 같은 C ++의 공유 포인터에 대한 접근 자 메서드를 작성하고 있습니다. class Foo { public: return_type getBar() const { return m_bar; } private: boost::shared_ptr<Bar> m_bar; } 따라서 getBar()반환 유형 의 const-ness를 지원 boost::shared_ptr하려면 Barit이 가리키는 수정을 방지 해야합니다 . 내 생각 엔 그것이 shared_ptr<const Bar>내가 그것을하기 위해 돌아가고 싶은 …
http://gcc.gnu.org/onlinedocs/libstdc++/manual/shared_ptr.html을 읽고 있으며 일부 스레드 안전 문제가 여전히 명확하지 않습니다. 표준은 참조 카운팅이 스레드로부터 안전하게 처리되고 플랫폼 독립적임을 보장합니다. 비슷한 문제-표준은 하나의 스레드 (마지막 참조 보유) 만 공유 객체에서 삭제를 호출하도록 보장합니다. shared_ptr은 그 안에 저장된 객체에 대한 스레드 안전을 보장하지 않습니까? 편집하다: 의사 코드 : // Thread I shared_ptr<A> …
나는 shared_ptr이 어디에 있는지 찾으려고 몇 시간 후에 지금 너무 실망합니다. 내가 보는 예제는 헤더를 포함하는 완전한 코드를 보여주지 shared_ptr않습니다. 간단하게 진술 std, tr1그리고 <memory>전혀 도움이되지 않는다! 부스트를 모두 다운로드했지만 여전히 표시되지 않습니다! 누군가 그것을 찾을 수있는 정확한 위치를 말함으로써 나를 도울 수 있습니까? 답답함을 풀어 주셔서 감사합니다! 편집 : …
저는 현재 스마트 포인터 사용법을 배우려고합니다. 그러나 몇 가지 실험을 수행하는 동안 포화 솔루션을 찾을 수없는 다음 상황을 발견했습니다. 클래스 A의 오브젝트가 클래스 B (자식)의 오브젝트의 상위가되지만 둘 다 서로를 알아야한다고 가정하십시오. class A; class B; class A { public: void addChild(std::shared_ptr<B> child) { children->push_back(child); // How to do pass …
질문은 제목에 정말 적합합니다.이 차이에 대한 기술적 이유가 무엇인지 알고 싶은데 그 이유도 궁금합니다. std::shared_ptr<void> sharedToVoid; // legal; std::unique_ptr<void> uniqueToVoid; // ill-formed;