赞
踩
int* a = new int();
shared_ptr<int> ptr(a);
shared_ptr<int> ptr1 = make_shared<int>(12);
shared_ptr<int> ptr2(new int());
shared_ptr<int> ptr3(ptr1);
智能指针是你在堆栈上声明的类模板,并可通过使用指向某个堆分配的对象的原始指针进行初始化。 在初始化智能指针后,它将拥有原始的指针。 这意味着智能指针负责删除原始指针指定的内存。 智能指针析构函数包括要删除的调用,并且由于在堆栈上声明了智能指针,当智能指针超出范围时将调用其析构函数,尽管堆栈上的某处将进一步引发异常。
通过使用熟悉的指针运算符(-> 和 *)访问封装指针,智能指针类将重载这些运算符以返回封装的原始指针。
请始终在单独的代码行上创建智能指针,而绝不在参数列表中创建智能指针,这样就不会由于某些参数列表分配规则而发生轻微泄露资源的情况。
如果make_shared没有公共构造那怎么解决呢?
class Obj {
struct enable_shared : public Obj {
enable_shared(...) : Obj(...) { }
};
void someFunction() {
auto ptr = std::make_shared<enable_shared>(...);
}
private:
Obj(…);
};
std::shared_ptr pA{new Obj()};
//这是国外的网友的解决办法
https://stackoverflow.com/questions/8147027/how-do-i-call-stdmake-shared-on-a-class-with-only-protected-or-private-const?rq=1
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。