重新初始化指针是不好的做法吗?

时间:2017-06-01 11:11:54

标签: c++

我有一个Image类,最初我不知道图像尺寸,所以我只是将一个data_指针初始化为一个大小为0的数组。稍后当我找到图像信息时,我重新初始化{{1}到一个新的大小。这会在内存中造成任何问题吗?并且有更清洁的方法吗?

以下是我写的课程:

data_

提前致谢

2 个答案:

答案 0 :(得分:7)

这实际上会泄漏内存。对/* Welcome Message FadeIn Effect */ /* Keyframes */ /* Chrome */ @-webkit-keyframes fadeIn { 0% { opacity:0; opacity: 1\9; /* IE9 only */ } 33% { opacity:1; } 66% { opacity: 0 } } /* Firefox */ @-moz-keyframes fadeIn { 0% { opacity:0; opacity: 1\9; /* IE9 only */ } 33% { opacity:1; } 66% { opacity: 0 } } .text-animated-one, .text-animated-two, .text-animated-three { position: absolute; } .text-animated-one { opacity:0; -webkit-animation:fadeIn ease-in 9s infinite; -moz-animation:fadeIn ease-in 9s infinite; animation:fadeIn ease-in 9s infinite; -webkit-animation-fill-mode:forwards; -moz-animation-fill-mode:forwards; animation-fill-mode:forwards; } .text-animated-two { opacity:0; -webkit-animation:fadeIn ease-in 9s infinite; -moz-animation:fadeIn ease-in 9s infinite; animation:fadeIn ease-in 9s infinite; -webkit-animation-fill-mode:forwards; -moz-animation-fill-mode:forwards; animation-fill-mode:forwards; -webkit-animation-delay: 3s; -moz-animation-delay: 3s; animation-delay: 3s; } .text-animated-three { opacity:0; -webkit-animation:fadeIn ease-in 9s infinite; -moz-animation:fadeIn ease-in 9s infinite; animation:fadeIn ease-in 9s infinite; -webkit-animation-fill-mode:forwards; -moz-animation-fill-mode:forwards; animation-fill-mode:forwards; -webkit-animation-delay: 6s; -moz-animation-delay: 6s; animation-delay: 6s; } 的调用为数组even if it is empty分配内存。一旦重新分配new,之前的数组就会泄露,无法再释放。

您可以确保data_分配任何delete[],或者只是不分配空数组,而是将new[]设置为data_,直到您有意义为止要使用的数据。

更好的想法是不允许在无效状态下创建对象,需要构造函数中的数据 - 请参阅RAII

  

在RAII中,持有资源是类不变的,并且与之相关   对象生存期:资源分配(或获取)在期间完成   构造函数创建对象(特别是初始化),   资源释放(释放)在对象期间完成   破坏者(特别是最终确定),由破坏者。

如果您决定保留nullptr,那么正如评论中所述,在重新分配setData之前,您还必须确保delete[]中的setData现有数据,以防万一该方法不止一次被调用。

答案 1 :(得分:3)

我认为更清洁的方法是使用矢量:

std::vector<unsigned  char> v; // vector with size 0
v.resize(r*c);                 // after size is known, just resize
相关问题