FWIW, bug 1265035 was an example that got me thinking about this whole
thing, and it was a crash involving a stack-allocated object
(WorkerJSRuntime) in which initialization failed.

On Thu, Apr 21, 2016 at 8:35 PM, Nicolas Silva <nical.si...@gmail.com> wrote:
> My experience is that stack allocated objects tend to be simpler,
> shorter-lived and less prone to accumulating invalid state somewhere and
> crash somewhere else. All in all they haven't been a source of pain the
> way heap-allocated objects often are when it comes to invalid state
> creeping up. There tend to be fewer of them also. So I am perfectly
> happy with handling them differently, and I can't think of a stack
> allocated object in the code I work with that would need something as
> involved as a static creation method or an nsresult& out param, to be
> honest.
>
> Cheers,
>
> Nical
>
> On Thu, Apr 21, 2016, at 12:24 PM, Nicholas Nethercote wrote:
>> On Thu, Apr 21, 2016 at 7:38 PM, Nicolas Silva <nical.si...@gmail.com>
>> wrote:
>> > Fallible construction (even with a way to report failure) is annoying if
>> > only because the object's destructor has to account for the possible
>> > invalid states. I much prefer having a static creation method that will
>> > only instantiate the object in case of success, and mark the constructor
>> > protected. Something like:
>> >
>> > static
>> > already_AddRefed<Foo> Foo::Create(SomeParams...) {
>> >     // logic that may fail...
>> >     if (failed) {
>> >          return nullptr;
>> >     }
>> >     return MakeAndAddRef<Foo>(stuffThatDidNotFail);
>> > }
>>
>> So instead of doing the infallible part in the constructor and the
>> fallible part in the Init() function, you're suggesting doing the
>> fallible part first and only calling the constructor once it succeeds?
>> Interesting. I can see it would work nicely for some heap-allocated
>> objects. But I see two possible problems:
>>
>> - It doesn't appear to work with stack-allocated objects?
>>
>> - I suspect that in some heap-allocated objects it will be hard to do
>> the fallible parts without having an object of the relevant type. I
>> don't have specific examples, just a hunch.
>>
>> Nick
_______________________________________________
dev-platform mailing list
dev-platform@lists.mozilla.org
https://lists.mozilla.org/listinfo/dev-platform

Reply via email to