#include <iostream>
class MyClass {
public:
MyClass() {
std::cout << "MyClass Constructor call" << std::endl;
}
~MyClass() {
std::cout << "MyClass Destructor call" << std::endl;
}
void func() {
std::cout << "Siuuuuu shared_ptr" << std::endl;
}
};
int main()
{
std::shared_ptr<MyClass> ptr = std::make_shared<MyClass>();
std::shared_ptr<MyClass> ptr2 = ptr;
printf("ptr과 ptr2는 동일한 객체를 가리킴(공유)\n");
ptr2->func();
return 0;
}
#include <iostream>
class MyClass {
public:
MyClass() {
std::cout << "MyClass Constructor call" << std::endl;
}
~MyClass() {
std::cout << "MyClass Destructor call" << std::endl;
}
};
int main()
{
std::unique_ptr<MyClass> ptr(new MyClass{});
std::unique_ptr<MyClass> ptr2 = move(ptr);
return 0;
}
#include <iostream>
class MyClass {
public:
MyClass() {
std::cout << "MyClass Constructor call" << std::endl;
}
~MyClass() {
std::cout << "MyClass Destructor call" << std::endl;
}
void func() {
std::cout << "Siuuuuuu weak_ptr" << std::endl;
}
};
int main()
{
std::shared_ptr<MyClass> ptr = std::make_shared<MyClass>();
std::weak_ptr<MyClass> weakPtr = ptr;
std::shared_ptr<MyClass> ptr2 = weakPtr.lock();
if (ptr2) {
std::cout << "weak_ptr로 변환한 shared_ptr 사용 가능" << std::endl;
}
return 0;
}
#include <iostream>
struct B;
struct A {
std::shared_ptr<B> b_ptr;
};
struct B {
std::weak_ptr<A> a_ptr;
};
int main()
{
std::shared_ptr<A> a(new A());
std::shared_ptr<B> b(new B());
a->b_ptr = b;
b->a_ptr = a;
return 0;
}