c++ - 保持动态分配数组而不用担心删除的最佳方法?

标签 c++ pointers boost

这是我需要的:

class A
{
public:
    A()
        : ptr_(new char[1000])
    {}

    ~A()
    {
        delete [] ptr_;
    }

private:
    char* ptr_;
};

它的问题是 - 我必须编写复制构造函数和赋值运算符。我不想那样做,所以我使用 shared_array:

class A
{
public:
    A()
        : array_(new char[1000])
    {}

private:
    boost::shared_array<char> array_;
};

问题是——我必须在所有地方都使用 array_.get(),因为我需要指向缓冲区的指针。所以我还介绍了另一个指针:

class A
{
public:
    A()
        : array_(new char[1000])
        , bore_ptr_(array_.get())
    {}

private:
    boost::shared_array<char> array_;
    char* const bore_ptr_;
};

我的问题是 - 有更好的方法吗? 在最终解决方案中我不喜欢的是——我保留了 shared_array,但我不使用它。它只是用来清洁东西。

最佳答案

看看 unique_ptr 或 shared_ptr。 没有真正需要为智能指针使用 boost,因为 C++11 及以后版本有自己的集合,可以很好地处理自己..

例如,您可以使用 unique_ptr,它将为您提供所需的语法糖,因为您可以像使用常规指针一样使用智能指针(唯一或共享)。因此,只需将 shared_array 换成其中之一即可。

关于c++ - 保持动态分配数组而不用担心删除的最佳方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37608706/

相关文章:

c++ - 如何最好地对使用 boost::asio::yield_context 的类进行单元测试?

android-ndk 构建无法链接 boost 系统

c++ - 指针数组作为函数参数

c++ - 从常量表达式中有符号整数的溢出中删除未定义的行为?

c++ - 替换循环以计算符合条件的元素数

C++ 编译时位掩码添加

C++ 用指针反转字符串中单词的顺序

代码可以编译,但在与游戏板一起运行时出现段错误

c++ - Seek 不适用于使用 boost filtering_istreambuf 初始化的 std::istream

delphi - 关于在Delphi中设置动画的指针的棘手事情