保留动态分配的数组而不为删除而烦恼的最佳方法
Best way for keeping dynamically allocated array without bothering about deletion?
这是我需要的:
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(),因为我需要指向缓冲区的 bore 指针。所以我还介绍了另一个指针:
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换成其中任何一个。
如果你的类应该公开一个返回原始指针的函数,只需返回array_.get
:
const char* GetPtr() const
{
return array_.get();
}
在类中,您始终可以使用此函数。或者,如果要改用bore_ptr_
,则需要确保在智能指针更新的任何地方更新它。但是,我建议您不要仅仅为了键入更少的代码而使用另一个虚假变量。维护 borre-ptr 将来更容易出错,并且绝对不是有效数据类的一部分。
您也可以选择vector
、unique_ptr
、shared_ptr
。但逻辑将保持不变。
保留动态分配的数组而不用担心删除的最佳方法是使用std::vector<char>
:
class A {
std::vector<char> array_;
char* const bore_ptr_;
public:
A() : array_(1000), bore_ptr_(array_.data()) {}
};
相关文章:
- 为不同配置设置MSVC_RUNTIME_LIBRARY的正确方法是什么
- 通过方法访问结构
- 最小硬币更换问题(自上而下方法)
- C++为构建时间获取QDateTime的可靠方法
- 在C#中处理C++指针而不使用unsafe的最佳方法
- 处理多个异常集合的C++方法
- 如果C++类在类方法中具有动态分配,但没有构造函数/析构函数或任何非静态成员,那么它仍然是POD类型吗
- 有什么方法可以遍历结构吗
- 当类在C++中定义时,有什么方法可以"register"类吗?
- 在C++中,将大的无符号浮点数四舍五入为整数的最佳方法是什么
- 实现无开销push_back的最佳方法是什么
- 使用std::函数映射对象方法
- 有符号的int和int-有没有一种方法可以在C++中区分它们
- C++从另一个类访问公共静态向量的正确方法是什么
- C++优先级队列,按对象的唯一指针的特定方法升序排列
- 没有为自己的结构调用列表推回方法
- 有没有什么方法可以使用一个函数中定义的常量变量,也可以由c++中同一程序中的其他函数使用
- 在类定义之后定义一个私有方法
- 枚举环境变量的惯用C++14/C++17方法
- 保留动态分配的数组而不为删除而烦恼的最佳方法