«shared-ptr» 태그된 질문

공유 소유권을 구현하는 참조 계산 스마트 포인터 클래스


8
C ++에서 make_shared와 normal shared_ptr의 차이점
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가 얼마나 효율적 인지 이해할 수 있도록 객체가 생성되고 작업이 수행되는 단계별 순서를 설명 할 수 있습니까 ? 위의 예를 참조로 제공했습니다.
276 c++  c++11  shared-ptr 

10
참조 또는 값으로 shared_ptr을 전달해야합니까?
함수가 shared_ptr(부스트 또는 C ++ 11 STL에서) 가져 가면 전달합니까? const 참조로 : void foo(const shared_ptr<T>& p) 또는 값으로 : void foo(shared_ptr<T> p)? 나는 그것이 더 빠를 것이라고 생각하기 때문에 첫 번째 방법을 선호합니다. 그러나 이것이 실제로 가치가 있습니까? 아니면 추가 문제가 있습니까? 선택해야 할 이유를 알려 주시거나 문제가 해결되지 …
270 c++  c++11  boost  shared-ptr 


16
보호되거나 개인 생성자 만있는 클래스에서 :: std :: make_shared를 어떻게 호출합니까?
작동하지 않는이 코드가 있지만 의도가 분명하다고 생각합니다. testmakeshared.cpp #include <memory> class A { public: static ::std::shared_ptr<A> create() { return ::std::make_shared<A>(); } protected: A() {} A(const A &) = delete; const A &operator =(const A &) = delete; }; ::std::shared_ptr<A> foo() { return A::create(); } 그러나 컴파일 할 때이 오류가 발생합니다. …
187 c++  c++11  shared-ptr 

2
배열에 shared_ptr : 사용해야합니까?
에 관한 작은 쿼리 shared_ptr입니다. shared_ptr배열을 가리키는 것을 사용하는 것이 좋습니다 ? 예를 들어 shared_ptr<int> sp(new int[10]); 그렇지 않다면 왜 안됩니까? 내가 이미 알고있는 한 가지 이유는를 늘리거나 줄일 수 없기 때문 shared_ptr입니다. 따라서 배열에 대한 일반적인 포인터처럼 사용할 수 없습니다.
172 c++  c++11  shared-ptr 

2
반원을위한 스마트 포인터 사용
C ++ 11의 클래스 멤버로 스마트 포인터의 사용법을 이해하는 데 문제가 있습니다. 나는 스마트 포인터에 대해 많이 읽었으며 나는 방법을 이해하는 것 같아요 unique_ptr및 shared_ptr/ weak_ptr일반적으로 작업을. 내가 이해하지 못하는 것은 실제 사용법입니다. 모든 사람들 unique_ptr이 거의 항상가는 길로 사용 하는 것이 좋습니다 . 그러나 어떻게 이런 식으로 구현할 것입니까? …

6
왜 std :: move std :: shared_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; }

6
std :: shared_ptr <void>가 작동하는 이유
종료시 임의 정리를 수행하기 위해 std :: shared_ptr을 사용하는 코드가 있습니다. 처음에는이 코드가 작동하지 않을 것이라고 생각했지만 다음을 시도했습니다. #include &lt;memory&gt; #include &lt;iostream&gt; #include &lt;vector&gt; class test { public: test() { std::cout &lt;&lt; "Test created" &lt;&lt; std::endl; } ~test() { std::cout &lt;&lt; "Test destroyed" &lt;&lt; std::endl; } }; int main() …
129 c++  c++11  shared-ptr 

17
c ++-std :: shared_ptr 또는 boost :: shared_ptr에 대한 참조 전달
를 사용하여 작업해야하는 함수가있는 경우 shared_ptr참조를 전달하는 것이 더 효율적이지 shared_ptr않습니까 (객체 복사를 방지하기 위해 )? 가능한 나쁜 부작용은 무엇입니까? 두 가지 가능한 경우를 생각합니다. 1) 함수 내부에서 다음과 같이 인수로 복사본이 만들어집니다. ClassA::take_copy_of_sp(boost::shared_ptr&lt;foo&gt; &amp;sp) { ... m_sp_member=sp; //This will copy the object, incrementing refcount ... } 2) 함수 내에서 …

4
`const shared_ptr <T>`와`shared_ptr <const T>`의 차이점은 무엇입니까?
다음과 같은 C ++의 공유 포인터에 대한 접근 자 메서드를 작성하고 있습니다. class Foo { public: return_type getBar() const { return m_bar; } private: boost::shared_ptr&lt;Bar&gt; m_bar; } 따라서 getBar()반환 유형 의 const-ness를 지원 boost::shared_ptr하려면 Barit이 가리키는 수정을 방지 해야합니다 . 내 생각 엔 그것이 shared_ptr&lt;const Bar&gt;내가 그것을하기 위해 돌아가고 싶은 …
115 c++  boost  const  shared-ptr 

3
std :: shared_ptr 스레드 안전성 설명
http://gcc.gnu.org/onlinedocs/libstdc++/manual/shared_ptr.html을 읽고 있으며 일부 스레드 안전 문제가 여전히 명확하지 않습니다. 표준은 참조 카운팅이 스레드로부터 안전하게 처리되고 플랫폼 독립적임을 보장합니다. 비슷한 문제-표준은 하나의 스레드 (마지막 참조 보유) 만 공유 객체에서 삭제를 호출하도록 보장합니다. shared_ptr은 그 안에 저장된 객체에 대한 스레드 안전을 보장하지 않습니까? 편집하다: 의사 코드 : // Thread I shared_ptr&lt;A&gt; …
106 c++  c++11  shared-ptr 

4
shared_ptr은 어디에 있습니까?
나는 shared_ptr이 어디에 있는지 찾으려고 몇 시간 후에 지금 너무 실망합니다. 내가 보는 예제는 헤더를 포함하는 완전한 코드를 보여주지 shared_ptr않습니다. 간단하게 진술 std, tr1그리고 &lt;memory&gt;전혀 도움이되지 않는다! 부스트를 모두 다운로드했지만 여전히 표시되지 않습니다! 누군가 그것을 찾을 수있는 정확한 위치를 말함으로써 나를 도울 수 있습니까? 답답함을 풀어 주셔서 감사합니다! 편집 : …

2
std :: shared_ptr of this
저는 현재 스마트 포인터 사용법을 배우려고합니다. 그러나 몇 가지 실험을 수행하는 동안 포화 솔루션을 찾을 수없는 다음 상황을 발견했습니다. 클래스 A의 오브젝트가 클래스 B (자식)의 오브젝트의 상위가되지만 둘 다 서로를 알아야한다고 가정하십시오. class A; class B; class A { public: void addChild(std::shared_ptr&lt;B&gt; child) { children-&gt;push_back(child); // How to do pass …


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.