Remove deprecated placement-new constructor from docs

[skip ci]
diff --git a/docs/advanced/classes.rst b/docs/advanced/classes.rst
index c0a9cfa..93deeec 100644
--- a/docs/advanced/classes.rst
+++ b/docs/advanced/classes.rst
@@ -361,14 +361,8 @@
 
 The syntax for binding constructors was previously introduced, but it only
 works when a constructor of the appropriate arguments actually exists on the
-C++ side.  To extend this to more general cases, pybind11 offers two different
-approaches: binding factory functions, and placement-new creation.
-
-Factory function constructors
------------------------------
-
-It is possible to expose a Python-side constructor from a C++ function that
-returns a new object by value or pointer.  For example, suppose you have a
+C++ side.  To extend this to more general cases, pybind11 makes it possible
+to bind factory functions as constructors. For example, suppose you have a
 class like this:
 
 .. code-block:: cpp
@@ -381,6 +375,9 @@
         static Example create(int a) { return Example(a); }
     };
 
+    py::class_<Example>(m, "Example")
+        .def(py::init(&Example::create));
+
 While it is possible to create a straightforward binding of the static
 ``create`` method, it may sometimes be preferable to expose it as a constructor
 on the Python side. This can be accomplished by calling ``.def(py::init(...))``
@@ -463,35 +460,6 @@
         .def(py::init([]() { return new PyExample(); }))
         ;
 
-Low-level placement-new construction
-------------------------------------
-
-A second approach for creating new instances use C++ placement new to construct
-an object in-place in preallocated memory.  To do this, you simply bind a
-method name ``__init__`` that takes the class instance as the first argument by
-pointer or reference, then uses a placement-new constructor to construct the
-object in the pre-allocated (but uninitialized) memory.
-
-For example, instead of:
-
-.. code-block:: cpp
-
-    py::class_<Example>(m, "Example")
-        .def(py::init<int>());
-
-you could equivalently write:
-
-.. code-block:: cpp
-
-    py::class_<Example>(m, "Example")
-        .def("__init__",
-            [](Example &instance, int arg) {
-                new (&instance) Example(arg);
-            }
-        );
-
-which will invoke the constructor in-place at the pre-allocated memory.
-
 Brace initialization
 --------------------