When using Continuous Delivery you need to have confidence that your code is correct and to have that confidence you need a system in place. Humans are fallible and we're all going to push buggy or broken code eventually; that's why we have procedures and systems in place to try and keep us on the right path.
Before migrating to continuous deployment our system relied on manual testing. We'd push our changes to a test environment and get our changes validated by a dedicated tester. Then, when it came to going to production, we'd get a sprint's worth of work into a staging environment, have the testers validate it there before finally deploying to a live environment.
Naturally, you can't rely on manual testing in continuous delivery - if you have to wait an indefinite period after you finish development the process can't really be called continuous. Instead, you rely on a battery of automated tests to pick up the slack - raise your pull