Thanks to visit codestin.com
Credit goes to github.com

Skip to content

[Book 2, Chapters 5.1 - 5.5] Don't use dynamic allocation #1483

@dimitry-ishenko

Description

@dimitry-ishenko

There is no need to use dynamic allocation in the perlin class. Simply declare ranvec, perm_x, perm_y and perm_z as arrays and that's it:

 class perlin {
   public:
     perlin() {
-        ranvec = new vec3[point_count];
         for (int i = 0; i < point_count; i++) {
             ranvec[i] = unit_vector(vec3::random(-1,1));
         }
 
-        perm_x = perlin_generate_perm();
-        perm_y = perlin_generate_perm();
-        perm_z = perlin_generate_perm();
+        perlin_generate_perm(perm_x);
+        perlin_generate_perm(perm_y);
+        perlin_generate_perm(perm_z);
     }
-
-    ~perlin() {
-        delete[] ranvec;
-        delete[] perm_x;
-        delete[] perm_y;
-        delete[] perm_z;
-    }
 
     double noise(const point3& p) const {
@@ -71,20 +63,16 @@ class perlin {
 
   private:
     static const int point_count = 256;
-    vec3* ranvec;
-    int* perm_x;
-    int* perm_y;
-    int* perm_z;
+    vec3 ranvec[point_count];
+    int  perm_x[point_count];
+    int  perm_y[point_count];
+    int  perm_z[point_count];
 
-    static int* perlin_generate_perm() {
-        auto p = new int[point_count];
-
+    static void perlin_generate_perm(int* p) {
         for (int i = 0; i < point_count; i++)
             p[i] = i;
 
         permute(p, point_count);
-
-        return p;
     }
 
     static void permute(int* p, int n) {

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions