diff --git a/Cython/Compiler/Nodes.py b/Cython/Compiler/Nodes.py
index cae0b994b574e9a991d52f11f5973836354dd805..5f6f8fae7ab8b700b0ff480e1f763d65c7f1198f 100644
--- a/Cython/Compiler/Nodes.py
+++ b/Cython/Compiler/Nodes.py
@@ -6055,7 +6055,7 @@ class DelStatNode(StatNode):
             if arg.type.is_pyobject or (arg.is_name and arg.type.is_memoryviewslice):
                 if arg.is_name and arg.entry.is_cglobal:
                     error(arg.pos, "Deletion of global C variable")
-            elif arg.type.is_ptr and arg.type.base_type.is_cpp_class:
+            elif arg.type.is_ptr and arg.type.base_type.is_cpp_class or arg.type.is_cyp_class:
                 self.cpp_check(env)
             elif arg.type.is_cpp_class:
                 error(arg.pos, "Deletion of non-heap C++ object")
@@ -6085,7 +6085,9 @@ class DelStatNode(StatNode):
                 arg.generate_evaluation_code(code)
                 code.putln("delete %s;" % arg.result())
                 arg.generate_disposal_code(code)
-           # else error reported earlier
+            elif arg.type.is_cyp_class:
+                code.putln("Cy_DECREF(%s);" % arg.result())
+            # else error reported earlier
 
     def annotate(self, code):
         for arg in self.args: