ric*_*cab 1 c++ constructor pointers exception dynamic-memory-allocation
我有一个带有原始指针的情况,我无法更改为智能指针,因为它是接口的一部分(我不想破坏使用它的任何代码):
struct Foo
{
Foo();
~Foo();
int * m_pStuff; // public!
};
Run Code Online (Sandbox Code Playgroud)
我不想在我的病人身上做太多事情.就像这样:
m_pStuff = new int[dynamically_obtained_size_which_is_greater_than_0];
m_pStuff[0] = 0;
Run Code Online (Sandbox Code Playgroud)
然后在析构函数中删除它.
现在,我想知道使用try/catch是否值得围绕它:
Foo::Foo()
: m_pStuff(0)
{
try
{
m_pStuff = new int[dynamically_obtained_size_which_is_greater_than_0];
m_pStuff[0] = 0;
}
catch(...)
{
delete m_pStuff;
throw;
}
}
Run Code Online (Sandbox Code Playgroud)
我能看到的观点:
我能看到的要点:
我还是很犹豫:我是否应该尝试使用try/catch?为什么?我想就此提出你的意见.
此外,您是否看到在分配时由于内存不足而导致异常的可能性?在这种情况下,已经分配的内存将被自动回收,对吗?
谢谢!
这完全没有意义.
int施工可能不会抛出,所以这里唯一可能的例外是std::bad_alloc.在这种情况下你在做什么?
delete一个NULL指针,这是一个无操作.分配失败,所以你不是"回收"任何东西.即恰恰是没有try/的情况catch.
只是让异常传播,并记录它是可能的.
但是,这个建议并不一定适用于其他类型.
另外,不要忘记您的复制构造函数.
| 归档时间: |
|
| 查看次数: |
1201 次 |
| 最近记录: |