我有一个Image类,最初我不知道图像尺寸,所以我只是将一个data_
指针初始化为一个大小为0的数组。稍后当我找到图像信息时,我重新初始化{{1}到一个新的大小。这会在内存中造成任何问题吗?并且有更清洁的方法吗?
以下是我写的课程:
data_
提前致谢
答案 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