【问题标题】:Is this bad practice or normal? [closed]这是不好的做法还是正常的? [关闭]
【发布时间】:2014-01-03 04:16:32
【问题描述】:

比如说我有两个班级。

我知道一种方法是在构造函数中传递一个指向 Foo 对象的指针,然后在 Object 中使用它,但这是处理事情的好方法吗?

还有其他更合适的吗? 谢谢。

class Object
{
private: //etc

public:
    void doStuff()
    {
        //access the foo object (x) created in main.
    }
};

class Foo
{
private: //etc

public:
    void function()
    {
        Object * obj = new Object();
        obj->doStuff();
    }
};


int main(int args, char**argv)
{
    Foo * x = new Foo();
    x->function();

    return 0;
}

【问题讨论】:

  • 为什么不使用继承?
  • 你想做什么?我所看到的只是你的主要,创建一个 Foo 实例,然后调用一个函数。在该函数中,您创建一个 Object 实例,然后在其上调用一个函数。问题是什么?
  • "一种方法是" --- 一种方法做什么? “接近事物”---什么样的事物?此外,泄漏内存肯定是一种非常糟糕的做法。
  • “不良做法”和“正常”并不相互排斥。

标签: c++ class pointers scope global


【解决方案1】:

这取决于你必须做什么。 如果您的 doStuff() 方法必须知道给定对象的内容,则不能使用这种方式。否则,如果您像您发布的示例一样,您的 doStuff 方法只需创建一个用于执行内部操作的对象,您可以使用这种方法。

一般来说,没有更好或更差的操作方式。这总是取决于。

一个例子。 你的 doStuff 方法需要外部的东西才能做某事:

class Foo
{
private: //etc

public:
    void function(Object* obj)
    {
        obj->doStuffWithTheGivenObject();
    }
};
}

您的 doStuff 方法不需要来自外部的任何内容: Foo 类 { 私人://等

public:
    void function()
    {
        Object* obj = new Object();
        obj->doStuffModifyingTheGivenObject();
        this->doStuffOnThisFooObjectWithTheJustCreatedObject(obj);
    }
};
}

在第二种情况下,您的 Foo 对象不需要 Object,因为它可以自己独立地创建一个对象以在内部使用它。 相反,在第一种情况下,它正在等待一个对象,因为它使用该对象来做某事。

区别在于:“我需要一个对象还是我可以在内部创建它?”

【讨论】:

  • "如果你的 doStuff() 方法必须知道给定对象的内容,你不能使用这种方式。" ---=-=-= 那你有什么建议呢?
  • 嗯,是的 - 这就是我传递指针的意思。所以我的假设毕竟是正确的。这就是我想澄清的一切 - 非常感谢。
【解决方案2】:

在这里了解“Foo”和“Object”实际上是什么可能会有所帮助。如果“Object”实际上是“Fruit”而“Foo”是“Apple”,那么继承就有意义了。或者,如果“Object”代表某种流,而“Foo”代表依赖于流的类,那么您所做的就是有意义的。这一切都取决于您在这里要完成的工作。

【讨论】:

    猜你喜欢
    • 2015-01-22
    • 1970-01-01
    • 1970-01-01
    • 2021-07-06
    • 2014-02-01
    • 2020-06-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多