关于性能和速度

时间:2014-04-22 20:49:49

标签: c++

我有一个类(A),用于不同的线程。只有这个类使用另一个类(B)。现在我继承或为A类中的B类对象分配内存。 但是我认为如果我将类B的对象作为参数传递给A的构造函数会更好。在这种情况下,不需要在A类中不断创建或继承B类。在我看来它会是快点。

那么在速度和性能方面会更好吗?

 class B {
  public: int i;
  B() {
     i = 123;
  }
  ~B() {}
  int get() const { return i; }
}


//first solutions
class A:public B {
public: int j;
A() {}
~A() {}
int somethingMethod(int n) {
  j = get() * n;
  return j;
}
}

A * a1 = new A(); //for example
cout << a1->somethingMethod(1) << endl;
cout << a1->somethingMethod(14) << endl;
A * a2 = new A();
cout << a1->somethingMethod(45) << endl;
A * a3 = new A();
cout << a1->somethingMethod(12) << endl;
cout << a1->somethingMethod(24) << endl;
cout << a1->somethingMethod(41) << endl;
A * a4 = new A(); //etc.
cout << a1->somethingMethod(41) << endl;

delete a1, a2, a3, a4;

//second solution
class A: {
public: int j;
B * b;
A(B * _b):b(_b) {}
~A() {}
int somethingMethod(int n) {
  j = b->get() * n;
  return j;
}
}

B * b = new B();
A * a1 = new A(b); //for example
cout << a1->somethingMethod(1) << endl;
cout << a1->somethingMethod(14) << endl;
A * a2 = new A(b);
cout << a1->somethingMethod(45) << endl;
A * a3 = new A(b);
cout << a1->somethingMethod(12) << endl;
cout << a1->somethingMethod(24) << endl;
cout << a1->somethingMethod(41) << endl;
A * a4 = new A(b); //etc.
cout << a1->somethingMethod(41) << endl;

delete b, a1, a2, a3, a4;

1 个答案:

答案 0 :(得分:0)

您需要考虑三件事 -

  1. 您说A类是由多个线程访问的。您的示例代码看起来不错,但如果只是一些伪代码,您嘲笑问问题,那么您需要确保您的类是线程安全的。在您的情况下,您只读取值,但如果从多个线程同时发生读/写,请确保使用一些线程同步对象来同步它们。

  2. 现在谈论速度和性能。您的示例类似乎没有做太多。我没有看到写课的必要性。内联函数也可能是最好的(考虑到这不是一些模拟代码)。即使您使用继承,只要您不使用虚拟函数,在vtable中查找额外的开销并且如果您真的关心那么多细节那么请使用指针,那么它就不应该伤害您。

    < / LI>
  3. 如果B类只是一个实现细节,那么我不会将它作为参数传递给构造函数。