c++ shared_ptr
2134 ワード
void f(shared_ptr, int);
int g();
void ok()
{
shared_ptr p( new int(2) );
f( p, g() );
}
void bad()
{
f( shared_ptr( new int(2) ), g() );
}
shared_ptr
#include
#include
#include
#include
#include
using std::cout;
using std::endl;
struct Base
{
Base() {
cout << "Base::Base()
";
}
~Base() {
cout << "Base::~Base()
";
}
};
struct Derived :public Base {
Derived() {
cout << "Derived::Derived()" << endl;
}
~Derived() {
cout << "Dervive::~Derived()" << endl;
}
};
void thr(std::shared_ptr p) {
std::this_thread::sleep_for(std::chrono::seconds(1));
std::shared_ptr lp = p;
{
static std::mutex io_mutex;
std::lock_guard<:mutex> lk(io_mutex);
std::cout << "local pointer in a thread:
"
<< "lp.get()" << lp.get()
<< ",lp.use_count()" << lp.use_count() << "
";
}
}
int main() {
std::shared_ptr p = std::make_shared();
std::cout << "Created a shared Derived (as a pointer to Base)
"
<< "p.get" << p.get()
<< ",p.use_count()= " << p.use_count() << "
";
std::thread t1(thr, p), t2(thr, p), t3(thr, p);
p.reset(); // release ownership from main
std::cout << "shared ownership between 3 threads and released
"
<< "ownership from main:
"
<< "p.get()" << p.get()
<< ",p.use_count()" << p.use_count() << "
";
t1.join(); t2.join(); t3.join();
std::cout << "All threads completed,the lase one deleted Derived
";
system("pause");
return 0;
}