# What does \`\_disableInitializers();\` function mean?

**URL:** <https://forum.openzeppelin.com/t/what-does-disableinitializers-function-mean/28730>\
**Category:** Upgrades\
**Created:** [May 15, 2022, 6:47pm UTC](https://forum.openzeppelin.com/t/what-does-disableinitializers-function-mean/28730 "2022-05-15T18:47:12Z")\
**Posts on this page:** 1\
**Showing post:** 2

<div class="post-metadata">

**Author:** ![ericglau](https://sea2.discourse-cdn.com/flex022/user_avatar/forum.openzeppelin.com/ericglau/32/15149_2.png) [@ericglau](https://forum.openzeppelin.com/u/ericglau)\
**Post date:** [May 16, 2022, 4:56pm UTC](https://forum.openzeppelin.com/t/what-does-disableinitializers-function-mean/28730/2 "2022-05-16T16:56:03Z")

</div>

Hi @migbash,

[`_disableInitializers()`](https://docs.openzeppelin.com/contracts/4.x/api/proxy#Initializable-_disableInitializers--) was added in Contracts v4.6.0 as part of the reinitializers support. The Caution note in [`Initializer`](https://docs.openzeppelin.com/contracts/4.x/api/proxy#Initializable) provides more details on why this is needed.

By putting it in the constructor, this prevents initialization of the **implementation** contract itself, as extra protection [to prevent an attacker from initializing it](https://forum.openzeppelin.com/t/uupsupgradeable-vulnerability-post-mortem/15680).

Thank you for mentioning the difference with the upgrades documentation. The `contructor() initializer {}` usage was recommended for previous version of Contracts. I've opened an [issue](https://github.com/OpenZeppelin/openzeppelin-upgrades/issues/574) to update the upgrades documentation to refer to `_disableInitializers()`.

---

_[View the full topic](https://forum.openzeppelin.com/t/what-does-disableinitializers-function-mean/28730)._
