diff --git a/src/dawn_native/CommandAllocator.h b/src/dawn_native/CommandAllocator.h
index ecede3c..504ba7a 100644
--- a/src/dawn_native/CommandAllocator.h
+++ b/src/dawn_native/CommandAllocator.h
@@ -113,14 +113,26 @@
             static_assert(sizeof(E) == sizeof(uint32_t), "");
             static_assert(alignof(E) == alignof(uint32_t), "");
             static_assert(alignof(T) <= kMaxSupportedAlignment, "");
-            return reinterpret_cast<T*>(
+            T* result = reinterpret_cast<T*>(
                 Allocate(static_cast<uint32_t>(commandId), sizeof(T), alignof(T)));
+            if (!result) {
+                return nullptr;
+            }
+            new (result) T;
+            return result;
         }
 
         template <typename T>
         T* AllocateData(size_t count) {
             static_assert(alignof(T) <= kMaxSupportedAlignment, "");
-            return reinterpret_cast<T*>(AllocateData(sizeof(T) * count, alignof(T)));
+            T* result = reinterpret_cast<T*>(AllocateData(sizeof(T) * count, alignof(T)));
+            if (!result) {
+                return nullptr;
+            }
+            for (size_t i = 0; i < count; i++) {
+                new (result + i) T;
+            }
+            return result;
         }
 
       private:
diff --git a/src/dawn_native/CommandEncoder.cpp b/src/dawn_native/CommandEncoder.cpp
index 7b50777..cc13ec2 100644
--- a/src/dawn_native/CommandEncoder.cpp
+++ b/src/dawn_native/CommandEncoder.cpp
@@ -643,7 +643,6 @@
         mEncodingState = EncodingState::RenderPass;
 
         BeginRenderPassCmd* cmd = mAllocator.Allocate<BeginRenderPassCmd>(Command::BeginRenderPass);
-        new (cmd) BeginRenderPassCmd;
 
         for (uint32_t i = 0; i < info->colorAttachmentCount; ++i) {
             if (info->colorAttachments[i] != nullptr) {
@@ -695,7 +694,6 @@
 
         CopyBufferToBufferCmd* copy =
             mAllocator.Allocate<CopyBufferToBufferCmd>(Command::CopyBufferToBuffer);
-        new (copy) CopyBufferToBufferCmd;
         copy->source.buffer = source;
         copy->source.offset = sourceOffset;
         copy->destination.buffer = destination;
@@ -720,7 +718,6 @@
 
         CopyBufferToTextureCmd* copy =
             mAllocator.Allocate<CopyBufferToTextureCmd>(Command::CopyBufferToTexture);
-        new (copy) CopyBufferToTextureCmd;
         copy->source.buffer = source->buffer;
         copy->source.offset = source->offset;
         copy->destination.texture = destination->texture;
@@ -757,7 +754,6 @@
 
         CopyTextureToBufferCmd* copy =
             mAllocator.Allocate<CopyTextureToBufferCmd>(Command::CopyTextureToBuffer);
-        new (copy) CopyTextureToBufferCmd;
         copy->source.texture = source->texture;
         copy->source.origin = source->origin;
         copy->copySize = *copySize;
@@ -794,7 +790,6 @@
 
         CopyTextureToTextureCmd* copy =
             mAllocator.Allocate<CopyTextureToTextureCmd>(Command::CopyTextureToTexture);
-        new (copy) CopyTextureToTextureCmd;
         copy->source.texture = source->texture;
         copy->source.origin = source->origin;
         copy->source.level = source->level;
diff --git a/src/dawn_native/ComputePassEncoder.cpp b/src/dawn_native/ComputePassEncoder.cpp
index 406a656..1217b92 100644
--- a/src/dawn_native/ComputePassEncoder.cpp
+++ b/src/dawn_native/ComputePassEncoder.cpp
@@ -44,7 +44,6 @@
         }
 
         DispatchCmd* dispatch = mAllocator->Allocate<DispatchCmd>(Command::Dispatch);
-        new (dispatch) DispatchCmd;
         dispatch->x = x;
         dispatch->y = y;
         dispatch->z = z;
@@ -58,7 +57,6 @@
 
         SetComputePipelineCmd* cmd =
             mAllocator->Allocate<SetComputePipelineCmd>(Command::SetComputePipeline);
-        new (cmd) SetComputePipelineCmd;
         cmd->pipeline = pipeline;
     }
 
diff --git a/src/dawn_native/ProgrammablePassEncoder.cpp b/src/dawn_native/ProgrammablePassEncoder.cpp
index 3c2b53a..bf9c451 100644
--- a/src/dawn_native/ProgrammablePassEncoder.cpp
+++ b/src/dawn_native/ProgrammablePassEncoder.cpp
@@ -53,7 +53,6 @@
 
         InsertDebugMarkerCmd* cmd =
             mAllocator->Allocate<InsertDebugMarkerCmd>(Command::InsertDebugMarker);
-        new (cmd) InsertDebugMarkerCmd;
         cmd->length = strlen(groupLabel);
 
         char* label = mAllocator->AllocateData<char>(cmd->length + 1);
@@ -65,8 +64,7 @@
             return;
         }
 
-        PopDebugGroupCmd* cmd = mAllocator->Allocate<PopDebugGroupCmd>(Command::PopDebugGroup);
-        new (cmd) PopDebugGroupCmd;
+        mAllocator->Allocate<PopDebugGroupCmd>(Command::PopDebugGroup);
     }
 
     void ProgrammablePassEncoder::PushDebugGroup(const char* groupLabel) {
@@ -75,7 +73,6 @@
         }
 
         PushDebugGroupCmd* cmd = mAllocator->Allocate<PushDebugGroupCmd>(Command::PushDebugGroup);
-        new (cmd) PushDebugGroupCmd;
         cmd->length = strlen(groupLabel);
 
         char* label = mAllocator->AllocateData<char>(cmd->length + 1);
@@ -103,7 +100,6 @@
         }
 
         SetBindGroupCmd* cmd = mAllocator->Allocate<SetBindGroupCmd>(Command::SetBindGroup);
-        new (cmd) SetBindGroupCmd;
         cmd->index = groupIndex;
         cmd->group = group;
     }
@@ -128,7 +124,6 @@
 
         SetPushConstantsCmd* cmd =
             mAllocator->Allocate<SetPushConstantsCmd>(Command::SetPushConstants);
-        new (cmd) SetPushConstantsCmd;
         cmd->stages = stages;
         cmd->offset = offset;
         cmd->count = count;
diff --git a/src/dawn_native/RenderPassEncoder.cpp b/src/dawn_native/RenderPassEncoder.cpp
index 7470063..c83666b 100644
--- a/src/dawn_native/RenderPassEncoder.cpp
+++ b/src/dawn_native/RenderPassEncoder.cpp
@@ -50,7 +50,6 @@
         }
 
         DrawCmd* draw = mAllocator->Allocate<DrawCmd>(Command::Draw);
-        new (draw) DrawCmd;
         draw->vertexCount = vertexCount;
         draw->instanceCount = instanceCount;
         draw->firstVertex = firstVertex;
@@ -67,7 +66,6 @@
         }
 
         DrawIndexedCmd* draw = mAllocator->Allocate<DrawIndexedCmd>(Command::DrawIndexed);
-        new (draw) DrawIndexedCmd;
         draw->indexCount = indexCount;
         draw->instanceCount = instanceCount;
         draw->firstIndex = firstIndex;
@@ -83,7 +81,6 @@
 
         SetRenderPipelineCmd* cmd =
             mAllocator->Allocate<SetRenderPipelineCmd>(Command::SetRenderPipeline);
-        new (cmd) SetRenderPipelineCmd;
         cmd->pipeline = pipeline;
     }
 
@@ -94,7 +91,6 @@
 
         SetStencilReferenceCmd* cmd =
             mAllocator->Allocate<SetStencilReferenceCmd>(Command::SetStencilReference);
-        new (cmd) SetStencilReferenceCmd;
         cmd->reference = reference;
     }
 
@@ -104,7 +100,6 @@
         }
 
         SetBlendColorCmd* cmd = mAllocator->Allocate<SetBlendColorCmd>(Command::SetBlendColor);
-        new (cmd) SetBlendColorCmd;
         cmd->color = *color;
     }
 
@@ -121,7 +116,6 @@
         }
 
         SetScissorRectCmd* cmd = mAllocator->Allocate<SetScissorRectCmd>(Command::SetScissorRect);
-        new (cmd) SetScissorRectCmd;
         cmd->x = x;
         cmd->y = y;
         cmd->width = width;
@@ -135,7 +129,6 @@
         }
 
         SetIndexBufferCmd* cmd = mAllocator->Allocate<SetIndexBufferCmd>(Command::SetIndexBuffer);
-        new (cmd) SetIndexBufferCmd;
         cmd->buffer = buffer;
         cmd->offset = offset;
     }
@@ -156,13 +149,12 @@
 
         SetVertexBuffersCmd* cmd =
             mAllocator->Allocate<SetVertexBuffersCmd>(Command::SetVertexBuffers);
-        new (cmd) SetVertexBuffersCmd;
         cmd->startSlot = startSlot;
         cmd->count = count;
 
         Ref<BufferBase>* cmdBuffers = mAllocator->AllocateData<Ref<BufferBase>>(count);
         for (size_t i = 0; i < count; ++i) {
-            new (&cmdBuffers[i]) Ref<BufferBase>(buffers[i]);
+            cmdBuffers[i] = buffers[i];
         }
 
         uint64_t* cmdOffsets = mAllocator->AllocateData<uint64_t>(count);
diff --git a/src/tests/unittests/CommandAllocatorTests.cpp b/src/tests/unittests/CommandAllocatorTests.cpp
index 8e8b7a7..206261f 100644
--- a/src/tests/unittests/CommandAllocatorTests.cpp
+++ b/src/tests/unittests/CommandAllocatorTests.cpp
@@ -401,3 +401,48 @@
         allocator.AllocateData<AlignedStruct<8>>(std::numeric_limits<size_t>::max() / 8);
     ASSERT_EQ(data, nullptr);
 }
+
+template <int DefaultValue>
+struct IntWithDefault {
+    IntWithDefault() : value(DefaultValue) {
+    }
+
+    int value;
+};
+
+// Test that the allcator correctly defaults initalizes data for Allocate
+TEST(CommandAllocator, AllocateDefaultInitializes) {
+    CommandAllocator allocator;
+
+    IntWithDefault<42>* int42 = allocator.Allocate<IntWithDefault<42>>(CommandType::Draw);
+    ASSERT_EQ(int42->value, 42);
+
+    IntWithDefault<43>* int43 = allocator.Allocate<IntWithDefault<43>>(CommandType::Draw);
+    ASSERT_EQ(int43->value, 43);
+
+    IntWithDefault<44>* int44 = allocator.Allocate<IntWithDefault<44>>(CommandType::Draw);
+    ASSERT_EQ(int44->value, 44);
+
+    CommandIterator iterator(std::move(allocator));
+    iterator.DataWasDestroyed();
+}
+
+// Test that the allcator correctly defaults initalizes data for AllocateData
+TEST(CommandAllocator, AllocateDataDefaultInitializes) {
+    CommandAllocator allocator;
+
+    IntWithDefault<33>* int33 = allocator.AllocateData<IntWithDefault<33>>(1);
+    ASSERT_EQ(int33[0].value, 33);
+
+    IntWithDefault<34>* int34 = allocator.AllocateData<IntWithDefault<34>>(2);
+    ASSERT_EQ(int34[0].value, 34);
+    ASSERT_EQ(int34[0].value, 34);
+
+    IntWithDefault<35>* int35 = allocator.AllocateData<IntWithDefault<35>>(3);
+    ASSERT_EQ(int35[0].value, 35);
+    ASSERT_EQ(int35[1].value, 35);
+    ASSERT_EQ(int35[2].value, 35);
+
+    CommandIterator iterator(std::move(allocator));
+    iterator.DataWasDestroyed();
+}
