【发布时间】:2018-08-02 16:09:47
【问题描述】:
由于 std::complex 是一个非平凡的类型,使用 GCC 8.1.1 编译以下内容
complex<double>* z = new complex<double>[6];
memset(z,0,6*sizeof*z);
delete [] (z);`
产生警告
清除非平凡类型的对象
我的问题是,这样做真的有任何潜在的危害吗?
【问题讨论】:
-
你为什么认为你需要
memset()呢?数组应该已经正确初始化。也最好简单地使用std::vector<complex<double>> z(6);来实现你想要的。 -
我不会这样用。这只是一种引发警告的方式。
-
请注意,在这种情况下,
memset是完全多余的。new complex<double>[6]在数组的每个元素上调用std::complex<double>的默认构造函数,这相当于将实部和虚部都归零。换句话说,memset复制了作为new[]调用的一部分所做的工作。 -
是的,看我上面的评论。