From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 12562 invoked by alias); 19 Jun 2017 16:26:44 -0000 Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org Received: (qmail 11146 invoked by uid 89); 19 Jun 2017 16:26:42 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-1.6 required=5.0 tests=AWL,BAYES_00,SPF_HELO_PASS,SPF_SOFTFAIL autolearn=no version=3.3.2 spammy= X-HELO: simark.ca Received: from simark.ca (HELO simark.ca) (158.69.221.121) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Mon, 19 Jun 2017 16:26:40 +0000 Received: by simark.ca (Postfix, from userid 33) id DC1631E4D7; Mon, 19 Jun 2017 12:26:43 -0400 (EDT) To: Pedro Alves Subject: Re: [PATCH v6] C++ify gdb/common/environ.c X-PHP-Originating-Script: 33:rcube.php MIME-Version: 1.0 Content-Type: text/plain; charset=US-ASCII; format=flowed Content-Transfer-Encoding: 7bit Date: Mon, 19 Jun 2017 16:26:00 -0000 From: Simon Marchi Cc: Sergio Durigan Junior , GDB Patches In-Reply-To: <7cf7b53f-600a-32f5-c9d0-2f45a8bb2b46@redhat.com> References: <20170413040455.23996-1-sergiodj@redhat.com> <20170619043531.32394-1-sergiodj@redhat.com> <87k248y3zp.fsf@redhat.com> <8aabc6fabb04f4e3e8b08e6fa1b0eacc@polymtl.ca> <816a5744-b3b4-855c-5f2e-4c9f0d255512@redhat.com> <1cff1a8055c0d770fef7171b8394e86d@polymtl.ca> <7cf7b53f-600a-32f5-c9d0-2f45a8bb2b46@redhat.com> Message-ID: <50ea9e5c05e31e1e459f22901ee86527@polymtl.ca> X-Sender: simon.marchi@polymtl.ca User-Agent: Roundcube Webmail/1.2.5 X-IsSubscribed: yes X-SW-Source: 2017-06/txt/msg00526.txt.bz2 On 2017-06-19 17:44, Pedro Alves wrote: > If we take the "always push a NULL on construction" approach, and > we want moved-from gdb_environs to be valid, then yes. Note how this > results in extra heap allocations when e.g., returning a > gdb_environ from functions by value, and makes std::vector > much less efficient when it decides it needs to reallocate/move > elements. Representing the empty state with a cleared internal > vector would avoid this. Given the move case, since the goal is to be efficient, then yeah I would agree that it would make sense to make a little bit of efforts to avoid allocating memory for an objects we are almost certainly throwing away. But still, in order to leave environ objects in a valid state after a move and to pedantically comply with the STL spec which says that the vector is left in an unspecified state, shouldn't we do a .clear () on the moved-from vector after the move? > Note BTW, that we need to be careful with self-move leaving the > *this object in a valid state. Should we just do if (&other == this) return *this; ?