c ++在成员初始化中传递构造函数中的新对象

时间:2016-04-14 14:29:36

标签: c++

在初始化下面的成员变量theOtherThing时,OtherThing类有一个构造函数,它接受类型为" Line"的对象,但是我没有通过SomeClass传递argLine'构造函数。我想在构造函数中声明一个新的Line对象,但我不知道如何。我想我可以在构造函数的主体中初始化它,也许我试图过于光滑。

SomeClass::SomeClass(const Polygon& argPoly,
                     const Point&   argPoint)
                     //No argLine being passed here
   :
      thePolygon           (argPoly),
      thePoint             (argPoint),
      theOtherThing        (new OtherThing(Line())), //Something like this 
                           //But, the above does not work
                           //Nor (new OtherThing(Line aLine))
                           //Nor (new OtherThing(new Line())         
{}

OtherThing类有一个构造函数,它接受" Line"

类型的对象
OtherThing::OtherThing(const Line& argLine)
   :
      theLine              (argLine)
{}

Line有一个默认构造函数,用于初始化其数据成员。

Line::Line()
{
  //Data members get initilized here
}

我该怎么做?也许我过于复杂化了。

修改

其他声明:

Private :
   OtherThingPtr theOtherThing //It's an implementaion of C++ std::shrd_ptr

修改

线类

class Line
{
public:
   double this;
   double that;
   Line();
   ... some other constructors and methods 
}

OtherThing Class

class OtherThing : RefCountedObj
{
public:
   OtherThing(const Line& argLine)

private:
   Line  theLine;
   ...
}

2 个答案:

答案 0 :(得分:1)

Line()的变体将编译。 OtherThing构造函数接受左值引用,传递rvalue(临时对象);您可以在Line构造函数中使用此临时OtherThing对象。问题是theLine的类型。

如果theLineconst Line&,并且在构造对象后引用theLine,则将调用未定义的行为。如果theLine只是Line,则调用复制构造函数,这应该没问题。

答案 1 :(得分:0)

基于 OtherThing 这个类,像thePolygon& thePoint和 OtherThing 的代码如下(如上所述):

class OtherThing
{
    OtherThing(const Line& argLine) : theLine(argLine){}
    Line theLine;
};

您只需要执行以下操作:

SomeClass::SomeClass(const Polygon& argPoly,
                 const Point&   argPoint)
                 //No argLine being passed here
   :
      thePolygon           (argPoly),
      thePoint             (argPoint),
      theOtherThing        (Line()), ...