+1

Aaron

On 5/12/14 2:07 PM, Boris Zbarsky wrote:
Background: in C++, one-argument constructors are implicit.

What this means is that given this class declaration:

  class Foo {
  public:
    Foo(int arg);

    passAFoo(const Foo& arg);
  };

This bit of C++:

  Foo foo(5);
  foo.passAFoo(10);

will compile and construct a temporary Foo that it passes to passAFoo. This can be a pretty serious footgun, especially in cases when the constructor is passed a pointer and takes ownership of that pointer: accidentally passing a pointer where an object of is expected will do bad things.

So I'd like to propose that our C++ style require one-arg constructors to be marked explicit unless there's a clear comment explaining why the constructor is implicit.

Thoughts?

-Boris
_______________________________________________
dev-platform mailing list
dev-platform@lists.mozilla.org
https://lists.mozilla.org/listinfo/dev-platform

_______________________________________________
dev-platform mailing list
dev-platform@lists.mozilla.org
https://lists.mozilla.org/listinfo/dev-platform

Reply via email to