构造函数中使用NEW

时间:2021-03-13 19:33:11
C++  内存

14 个解决方案

#1


引用 楼主 jinyaba 的回复:
在构造函数中new一段内存,失败了怎么处理


尽量不要在构造函数中做这样的事情,否则失败了操作系统可能都无法处理

#2


new失败属于边缘问题,不需要去管。
非得管你可以重载new防止程序崩溃。比较常用的有stl的new (nothrow)

#3


引用 2 楼 lyramilk 的回复:
new失败属于边缘问题,不需要去管。
非得管你可以重载new防止程序崩溃。比较常用的有stl的new (nothrow)

麻烦给个实例

#4


构造函数式可以抛出异常的。

如果你对于构造函数里面 new 不放心的, 你可以加入异常机制。

#5


如果不加入异常机制,将会造成内存泄露。

#6


CObject::CObject()
{
      m_pSubobject = new CSubObject();

      try
      {
      //do something
       }
      catch(...)
      {
          delete  m_pSubobject;//清理对象
          throw ;//抛出异常
       }
}

#7


引用 5 楼 u013685578 的回复:
如果不加入异常机制,将会造成内存泄露。

加了异常机制又如何判断构造函数构造失败呢

#8


引用 6 楼 u010548686 的回复:
CObject::CObject()
{
      m_pSubobject = new CSubObject();

      try
      {
      //do something
       }
      catch(...)
      {
          delete  m_pSubobject;//清理对象
          throw ;//抛出异常
       }
}



加了异常后, 在构造函数里面抛出异常阿, 然后捕获异常打印对应信息,不就能得知构造是否失败了吗

#9


引用 7 楼 jinyaba 的回复:
Quote: 引用 5 楼 u013685578 的回复:

如果不加入异常机制,将会造成内存泄露。

加了异常机制又如何判断构造函数构造失败呢


加了异常后, 在构造函数里面抛出异常阿, 然后捕获异常打印对应信息,不就能得知构造是否失败了吗 

#10


是不是其他地方处理赋值出现了问题

#11


引用 9 楼 u013685578 的回复:
Quote: 引用 7 楼 jinyaba 的回复:

Quote: 引用 5 楼 u013685578 的回复:

如果不加入异常机制,将会造成内存泄露。

加了异常机制又如何判断构造函数构造失败呢


加了异常后, 在构造函数里面抛出异常阿, 然后捕获异常打印对应信息,不就能得知构造是否失败了吗 

灰常感谢

#12


引用 10 楼 ganpengjin1 的回复:
是不是其他地方处理赋值出现了问题

没有,就是想问问如果已经这样做了,又要保证代码的稳定性,该怎么办

#13


引用 12 楼 jinyaba 的回复:
Quote: 引用 10 楼 ganpengjin1 的回复:

是不是其他地方处理赋值出现了问题

没有,就是想问问如果已经这样做了,又要保证代码的稳定性,该怎么办

我帮我同事解决的一个问题,正是由于赋值出了问题,结果出现bad_alloc

#14


引用 11 楼 jinyaba 的回复:
Quote: 引用 9 楼 u013685578 的回复:

Quote: 引用 7 楼 jinyaba 的回复:

Quote: 引用 5 楼 u013685578 的回复:

如果不加入异常机制,将会造成内存泄露。

加了异常机制又如何判断构造函数构造失败呢


加了异常后, 在构造函数里面抛出异常阿, 然后捕获异常打印对应信息,不就能得知构造是否失败了吗 

灰常感谢


不用谢, 不知道解决你的问题没

#1


引用 楼主 jinyaba 的回复:
在构造函数中new一段内存,失败了怎么处理


尽量不要在构造函数中做这样的事情,否则失败了操作系统可能都无法处理

#2


new失败属于边缘问题,不需要去管。
非得管你可以重载new防止程序崩溃。比较常用的有stl的new (nothrow)

#3


引用 2 楼 lyramilk 的回复:
new失败属于边缘问题,不需要去管。
非得管你可以重载new防止程序崩溃。比较常用的有stl的new (nothrow)

麻烦给个实例

#4


构造函数式可以抛出异常的。

如果你对于构造函数里面 new 不放心的, 你可以加入异常机制。

#5


如果不加入异常机制,将会造成内存泄露。

#6


CObject::CObject()
{
      m_pSubobject = new CSubObject();

      try
      {
      //do something
       }
      catch(...)
      {
          delete  m_pSubobject;//清理对象
          throw ;//抛出异常
       }
}

#7


引用 5 楼 u013685578 的回复:
如果不加入异常机制,将会造成内存泄露。

加了异常机制又如何判断构造函数构造失败呢

#8


引用 6 楼 u010548686 的回复:
CObject::CObject()
{
      m_pSubobject = new CSubObject();

      try
      {
      //do something
       }
      catch(...)
      {
          delete  m_pSubobject;//清理对象
          throw ;//抛出异常
       }
}



加了异常后, 在构造函数里面抛出异常阿, 然后捕获异常打印对应信息,不就能得知构造是否失败了吗

#9


引用 7 楼 jinyaba 的回复:
Quote: 引用 5 楼 u013685578 的回复:

如果不加入异常机制,将会造成内存泄露。

加了异常机制又如何判断构造函数构造失败呢


加了异常后, 在构造函数里面抛出异常阿, 然后捕获异常打印对应信息,不就能得知构造是否失败了吗 

#10


是不是其他地方处理赋值出现了问题

#11


引用 9 楼 u013685578 的回复:
Quote: 引用 7 楼 jinyaba 的回复:

Quote: 引用 5 楼 u013685578 的回复:

如果不加入异常机制,将会造成内存泄露。

加了异常机制又如何判断构造函数构造失败呢


加了异常后, 在构造函数里面抛出异常阿, 然后捕获异常打印对应信息,不就能得知构造是否失败了吗 

灰常感谢

#12


引用 10 楼 ganpengjin1 的回复:
是不是其他地方处理赋值出现了问题

没有,就是想问问如果已经这样做了,又要保证代码的稳定性,该怎么办

#13


引用 12 楼 jinyaba 的回复:
Quote: 引用 10 楼 ganpengjin1 的回复:

是不是其他地方处理赋值出现了问题

没有,就是想问问如果已经这样做了,又要保证代码的稳定性,该怎么办

我帮我同事解决的一个问题,正是由于赋值出了问题,结果出现bad_alloc

#14


引用 11 楼 jinyaba 的回复:
Quote: 引用 9 楼 u013685578 的回复:

Quote: 引用 7 楼 jinyaba 的回复:

Quote: 引用 5 楼 u013685578 的回复:

如果不加入异常机制,将会造成内存泄露。

加了异常机制又如何判断构造函数构造失败呢


加了异常后, 在构造函数里面抛出异常阿, 然后捕获异常打印对应信息,不就能得知构造是否失败了吗 

灰常感谢


不用谢, 不知道解决你的问题没