English 中文(简体)
C++ DAL - 回返或重新安置
原标题:C++ DAL - Return Reference or Populate Passed In Reference
  • 时间:2009-10-05 13:15:49
  •  标签:

[EDIT 1 - 增加第三点 (增 编 Alex)]

你们喜欢哪一种方法?

Car& DAL::loadCar(int id) {}
bool DAL::loadCar(int id, Car& car) {}
Car* DAL::loadCar(int id) {}

如果找不到这辆汽车,第一种方法就会使车返回无效,第二种方法是假的。

第二种方法将在数据库中查询的数据的蒸发和填满时形成一个 Car物体。 推定(M C++是非常隐蔽的),即按以下方式编码:

Car& DAL::loadCar(int id)
{
    Car *carPtr = new Car();
    Car &car= *carPtr;
    car.setModel(/* value from database */);
    car.setEngineSize(/* value from database */);
    // etc
    return car;
}

增 编

最佳回答

第二点肯定是可取的。 你正在回头提到一个新物体。 对于使用该软件的终端用户来说,不清楚返回物体需要删除。 如果使用者这样做,PLUS

Car myCar = dal.loadCar( id );

点人将丢失。

因此,你的第二种方法将记忆控制在打电话者身上,并制止任何令人厌恶的错误。

Edit:通过提及回归是明智的,但只有在父母,即DAL, 阶层控制着参考寿命。 比如,如果DAL级的甲型六氯环己烷在它中具有病媒,那么回归参考就是一个非常明智的事情。

Edit2:我仍然喜欢第二套。 第3次比第1次要好得多,但最后,你认为该目标已经启动。

你也可以提供

Car DAL::loadCar(int id);

并希望能接受那份打印本。

也不要忘记,你可以制造一种无汽车物体,以便你返回一个“有效”的物体,但你没有在所有领域得到任何有用的信息(因此,显然可以初步掌握垃圾数据)。 这是“纽尔目标模式”。

问题回答

由于你是分配 objects子的任何途径,因此,如果出现问题,不考虑将 Car(Lad Car())送回NUL。 这样,你就没有对参考类型的限制(每个参考资料必须先入门),也就能够表明错误。





相关问题
热门标签