c++ - 在智能指针中同时使用标量和数组

标签 c++ smart-pointers

如何在智能指针中同时使用标量和数组?

使用new和delete指针的老方法:

int *p;

if (useScalar) {
    p = new int;
} else {
    p = new int[10];
}

if (useScalar) {
    delete p;
} else {
    delete[] p;
}

在智能指针中,我必须为每个标量和数组指针使用 2 个指针:

std::unique_ptr<int> p1(new int);
std::unique_ptr<int[]> p2(new int[10]);

如何减少只使用 1 个智能指针?

最佳答案

如果您使用自定义删除器,则可以为任一指针使用相同的类型。

std::unique_ptr<int, void(*)(int*)> p = {nullptr, [](int*){}};
if (useScalar) {
    p = {
        new int,
        [](int* p){delete p;}
    };
} else {
    p = {
        new int[10],
        [](int* p){delete[] p;},
    };
}

关于c++ - 在智能指针中同时使用标量和数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36741213/

相关文章:

c++ - typedef 改变含义

c++ - 有没有办法在 VSCode Mac 中链接 SFML 库?

c++ - 成功编译Node模块和 "Module did not self-register."

c++ - 使用 std::unique_ptr 创建对象数组

c++ - 编译器生成的默认构造函数会将 std::array 中的指针初始化为 nullptr 吗?

c++ - 编译器优化打破了惰性迭代器

c++ - 如何安全地重载 std::unique_ptr 的自定义删除器?

c++ - 将 vector 成员变量返回给外部类的最佳方法

c++ - clang 和 gcc 在使用智能指针时不会警告多态性的非虚基析构函数?

c++ - 取消引用 std::tr1:shared_ptr 与取消引用裸指针有什么区别吗?