异常安全构造函数
Exception safety constructor
在我的小程序中,我需要有一个带有一些动态分配数据的类,比如这个:
class MyClass
{
public:
MyClass(size_t aSize1, size_t aSize2)
:mX1(new char[aSize1]),
mX2(new char[aSize2])
{}
~MyClass()
{
delete[] mX1;
delete[] mX2;
}
...
private:
MyClass(const MyClass& aObj);
MyClass& operator=(const MyClass& aObj);
private:
char* mX1;
char* mX2;
};
第一个问题是,如果我应该使用原始指针,那么类的构造函数是否安全?我的意思是,如果new
在为mX2
分配内存时抛出异常,会有什么麻烦吗?在这种情况下,已经分配给mX1
的内存是否会泄漏或被正确删除?
第二个问题是,什么会更好——使用一些智能指针(例如unique_ptr)或使用stl容器(例如vector)来保存动态数组?
UPD。如果我将使用unique_ptr,std::unique_ptr<char[]> mX1;
,我应该如何实现复制构造函数?
- 在构造函数中处理异常是个好主意。但当你的记忆力耗尽时,你就陷入了没有某种乐器的困境。你几乎无能为力
- 使用智能指针/矢量等。省去生活中的麻烦
相关文章:
- 使用范围解析运算符时,在构造函数中调用虚拟方法是否安全?
- 构造函数成员初始值设定项跨成员列出,安全吗?
- 为什么在构造函数中将字符串分配给指针是安全的?
- 将数据成员的指针传递给基类构造函数是否安全?
- 是STD :: REGEX构造函数安全
- C++中构造函数和布尔的安全空状态:
- 在可移动类型的构造函数 lambda 中捕获此内容的安全使用
- 在已发布的结构中添加构造函数(用于 memcpy)是否安全?
- 以下移动构造函数代码安全吗?
- 与构造函数参数相关的异常安全的习语
- 在构造函数中使用"this"启动线程是安全的?
- 异常安全构造函数
- 将子结构值设置为对象构造函数中安全的纯虚拟函数返回的值
- 指向调用类的构造函数的资源是否安全?
- 这段代码安全吗,是否可以从构造函数C++生成线程
- 根据C++标准,显式调用构造函数和析构函数是否安全
- 在构造函数中记录此值是否安全
- 构造函数在 C++ 和/或 C++11 中是否安全
- 锁定线程安全队列的移动构造函数的右值参数?
- 依赖隐式声明的move构造函数安全吗