diff --git src/wp-includes/comment.php src/wp-includes/comment.php
index ada21ec..1f8b352 100644
--- src/wp-includes/comment.php
+++ src/wp-includes/comment.php
@@ -265,11 +265,19 @@ class WP_Comment_Query {
 	public $date_query = false;
 
 	/**
+	 * Query vars set by the user
+	 *
+	 * @since  3.1.0
+	 * @access public
 	 * @var array
 	 */
 	public $query_vars;
 
 	/**
+	 * List of comments.
+	 *
+	 * @since  4.0.0
+	 * @access public
 	 * @var array
 	 */
 	public $comments;
@@ -365,9 +373,36 @@ class WP_Comment_Query {
 	 * }
 	 * @return int|array Array of comments or number of found comments if `$count` is set to true.
 	 */
-	public function query( $query_vars ) {
-		global $wpdb;
 
+	/**
+	 * Constructor.
+	 *
+	 * Sets up the comment query, if parameter is not empty.
+	 *
+	 * @since  4.0.0
+	 * @access public
+	 *
+	 * @param string $query URL query string.
+	 * @return WP_Comment_Query
+	 */
+	function __construct( $query = '' ) {
+		if ( ! empty( $query ) ) {
+			$this->query( $query );
+		}
+	}
+
+	/**
+	 * Parse a query string and set query type booleans.
+	 *
+	 * @since  1.5.0
+	 * @access public
+	 *
+	 * @param string|array $query Optional query.
+	 */
+	function parse_query( $query = '' ) {
+		if ( empty( $query ) ) {
+			$query = $this->query_vars;
+		}
 		$defaults = array(
 			'author_email' => '',
 			'author__in' => '',
@@ -407,9 +442,37 @@ class WP_Comment_Query {
 			'date_query' => null, // See WP_Date_Query
 		);
 
+		$this->query_vars = wp_parse_args( $query, $defaults );
+		do_action_ref_array('parse_comment_query', array(&$this));
+	}
+
+	/**
+	 * Sets up the WordPress query by parsing query string.
+	 *
+	 * @since 1.5.0
+	 * @access public
+	 *
+	 * @param string $query_vars URL query string.
+	 * @return array List of posts.
+	 */
+	function query( $query_vars ) {
+		$this->query_vars = wp_parse_args( $query_vars );
+		return $this->get_comments();
+	}
+
+	/**
+	 * Execute the query
+	 *
+	 * @since 4.0.0
+	 *
+	 * @return int|array
+	 */
+	function get_comments() {
+		global $wpdb;
+
 		$groupby = '';
 
-		$this->query_vars = wp_parse_args( $query_vars, $defaults );
+		$this->parse_query();
 
 		// Parse meta query
 		$this->meta_query = new WP_Meta_Query();
@@ -428,8 +491,8 @@ class WP_Comment_Query {
 		 */
 		do_action_ref_array( 'pre_get_comments', array( &$this ) );
 
-		// $args can be whatever, only use the args defined in defaults to compute the key
-		$key = md5( serialize( wp_array_slice_assoc( $this->query_vars, array_keys( $defaults ) ) )  );
+		// $args can be whatever, only use the args defined in the query_vars to compute the key
+		$key = md5( serialize( $this->query_vars)  );
 		$last_changed = wp_cache_get( 'last_changed', 'comment' );
 		if ( ! $last_changed ) {
 			$last_changed = microtime();
@@ -438,6 +501,7 @@ class WP_Comment_Query {
 		$cache_key = "get_comments:$key:$last_changed";
 
 		if ( $cache = wp_cache_get( $cache_key, 'comment' ) ) {
+			$this->comments = $cache;
 			return $cache;
 		}
 
@@ -825,6 +889,7 @@ class WP_Comment_Query {
 		$comments = apply_filters_ref_array( 'the_comments', array( $results, &$this ) );
 
 		wp_cache_add( $cache_key, $comments, 'comment' );
+		$this->comments = $comments;
 
 		return $comments;
 	}
diff --git tests/phpunit/tests/comment/query.php tests/phpunit/tests/comment/query.php
index 55e7d73..4f16a1d 100644
--- tests/phpunit/tests/comment/query.php
+++ tests/phpunit/tests/comment/query.php
@@ -1587,4 +1587,24 @@ class Tests_Comment_Query extends WP_UnitTestCase {
 
 		$this->assertEqualSets( array_merge( $c1, $c3 ), $found );
 	}
+
+	/**
+	 * Ticket 24826
+	 */
+	function test_comment_query_object() {
+		$comment_id = $this->factory->comment->create();
+
+		$query1 = new WP_Comment_Query();
+		$this->assertNull( $query1->query_vars );
+		$this->assertEmpty( $query1->comments );
+		$comments = $query1->query( array( 'status' => 'all' ) );
+		$this->assertInternalType( 'array', $query1->query_vars );
+		$this->assertNotEmpty( $query1->comments );
+		$this->assertInternalType( 'array', $query1->comments );
+
+		$query2 = new WP_Comment_Query( array( 'status' => 'all' ) );
+		$this->assertNotEmpty( $query2->query_vars );
+		$this->assertNotEmpty( $query2->comments );
+		$this->assertEquals( $query2->comments, $query1->get_comments() );
+	}
 }
