<Int[]>arr_p(newInt(10));// 删除器调用delete[] 1. 由于用Int[]初始化shared_ptr的模板类型参数,所以删除器使用delete[],delete[]会在_Ptr往前偏移4字节取出数组元素个数,此时会取出fdfdfdfd,然后执行这么多次析构函数 shared_ptr管理一个对象,却使用new[] <Int>p(newInt[10]);// 删除器调用delete ...
auto pointer = std::make_shared<int>(10); auto pointer2 = pointer; // 引用计数+1 auto pointer3 = pointer; // 引用计数+1 int *p = pointer.get(); // 这样不会增加引用计数 std::cout << "pointer.use_count() = " << pointer.use_count() << std::endl; // 3 std::cout << "...
unique_ptr,shared_ptr和数组①unique_ptr没有重载operator*()所以,要使用unique_ptr指向的数组的话,就只能使用operator[]来访问数组元素了,如图:#include <iostream> #include<memory> using namespace std; int main() { // shared_ptr<int[]> ps(new int[1000]);由于默认是delete,所以禁止new [] unique...
//本例中,传递给shared_ptr一个lambda作为删除器shared_ptr<int>sp(newint[10],[](int*p){delete[]p;});shared_ptr<int>sp2(newint[3]{1,2,3},[](int*p){delete[]p;});sp2.reset();//使用自己书写的lambda释放数组 动态数组的访问:shared_ptr不支持点和箭头成员运算符访问数组,并且不提供下标运...
shared_ptr<int>p=make_shared<int>(42); //p2指向一个值为10个'9'的string shared_ptr<string>p2=make_shared<string>(10,'9'); //p3指向一个值初始化为0的int数 shared_ptr<int>p3=make_shared<int>(); 1. 2. 3. 4. 5. 6.
std::shared_ptr 也可以用来管理动态分配的数组,但需要注意使用 std::shared_ptr 的数组特化。 #include <iostream> #include <memory> void example() { // 使用 std::shared_ptr 管理动态分配的数组 std::shared_ptr<int[]> ptr(new int[3]{1, 2, 3}); std::cout << "Array: "; for (int ...
另外,shared_ptr无法直接处理数组,因为它使用delete来销毁对象,而对于数组,需要用delete[]。因此,需要指定删除器: 代码语言:javascript 复制 /来源:公众号【编程珠玑】 #include<iostream>#include<memory>intmain(){auto sp=std::make_shared<std::string>("wechat:shouwangxiansheng");std::string*p=sp.get(...
// (1) provide array deleterstd::shared_ptr<int>sp(newint[10], array_deleter<int>()); // (2) or lambda expressionstd::shared_ptr<int>sp(newint[10], [](int*p) { delete[] p; }); // (3) or use default_deletestd::shared_ptr<int>sp(newint[10], std::default_delete<int[...
shared_ptr<int>clone(intp){// 正确:显式地用 int* 创建 shared_ptr<int>returnshared_ptr<int>(newint(p));} 默认情况下,一个用来初始化智能指针的普通指针必须指向动态内存,因为智能指针默认使用 delete 释放它所关联的对象。我们可以将智能指针绑定到一个指向其他类型的资源的指针上,但是为了这样做,必须提...
void my_deleter(int* p) { delete[] p; } std::shared_ptr<int> sp(new int[10], my_deleter); ``` 可以使用自定义删除器来管理动态分配的内存。上面的代码使用my_deleter函数来释放动态分配的int数组。 总之,shared_ptr是一个非常强大和方便的智能指针类,可以帮助我们更好地管理内存。但是需要注意避免...