default d'tor,copy c'tor,operator =

时间:2010-10-06 22:24:28

标签: c++

我们假设我有一些A类:

class A{
int x;
int value() {return x};
};

A a;
cout << a.value();

我的问题是:我的编译器是否会为我生成d'tor copy c'tor and operator=(因为它实际上并不需要它)

EDITED

它根本不会写给我,因为它似乎毫无用处,如果我错了你可以举例吗

4 个答案:

答案 0 :(得分:7)

原则上,对于“使用过”的ctor和dtor,是的。否operator=:默认函数仅在使用时生成,这非常重要,因为对于某些类,默认的operator=“不起作用”,因此它不可用。

在实践中,这个类的自动生成的ctor和dtor什么都不做。一个足以用于实际工作的编译器将确保它们的理论存在不会导致生成任何代码[*]。

[*]我想。在二进制文件中有一堆do-nothing-and-return函数并不一定是那么糟糕。如果编译器无法删除对它们的调用,那可能会非常糟糕 - 不是针对您的程序,而是针对包含数百万个此类对象的更大程序......

答案 1 :(得分:2)

优化器可以为您排除不必要的东西。

答案 2 :(得分:0)

如果可以(例如成员不禁止它),它可能会默认生成它们。它如果不需要它们,那么它可以处理它们。否则,您最终可能会生成数百个(或更多)相同的符号(并且可能是私有的)。

答案 3 :(得分:0)

您可以轻松检查编译器生成的汇编代码 - 只需确保打开优化。我的猜测是,在你的情况下,这些都不会真正产生。