#include
class Foo
{
public:
Foo (int N) : values {new int[N]}{
for (int i = 0; i < N; i++) {
values[i]=2*i;
}
};
private:
int *values;
};
int main()
{
Foo A {20};
Foo B {A};
Foo C {std::move(A)};
return 0;
}
< /code>
так что если я собираюсь и делаю
nm -C a.out | grep Foo< /code>
я просто см. < /p>
00000000000011b8 W Foo::Foo(int)
00000000000011b8 W Foo::Foo(int)
000000000000122a W std::remove_reference::type&& std::move(Foo&)
< /code>
Если я изменяю класс, чтобы включить, например, < /p>
Foo(const Foo&)=default;
< /code>
Тогда полученный выход из NM одинаковы. В то время как если я сделаю < /p>
Foo(const Foo&){};
< /code>
Тогда я получаю < /p>
00000000000011ce W Foo::Foo(int)
0000000000001240 W Foo::Foo(Foo const&)
00000000000011ce W Foo::Foo(int)
0000000000001240 W Foo::Foo(Foo const&)
000000000000124f W std::remove_reference::type&& std::move(Foo&)
Я ожидал, что неявно сгенерированные версии по умолчанию будут видны в таблице символов
Почему я не вижу неявно сгенерированных конструкторов/destructor/etc в таблице символов для моего кода C ++?[code]#include
class Foo { public: Foo (int N) : values {new int[N]}{ for (int i = 0; i < N; i++) { values[i]=2*i; } };
private: int *values; };
int main() { Foo A {20}; Foo B {A}; Foo C {std::move(A)};
return 0; } < /code> так что если я собираюсь и делаю nm -C a.out | grep Foo< /code> я просто см. < /p> 00000000000011b8 W Foo::Foo(int) 00000000000011b8 W Foo::Foo(int) 000000000000122a W std::remove_reference::type&& std::move(Foo&) < /code> Если я изменяю класс, чтобы включить, например, < /p> Foo(const Foo&)=default; < /code> Тогда полученный выход из NM одинаковы. В то время как если я сделаю < /p> Foo(const Foo&){}; < /code> Тогда я получаю < /p> 00000000000011ce W Foo::Foo(int) 0000000000001240 W Foo::Foo(Foo const&) 00000000000011ce W Foo::Foo(int) 0000000000001240 W Foo::Foo(Foo const&) 000000000000124f W std::remove_reference::type&& std::move(Foo&) [/code] Я ожидал, что неявно сгенерированные версии по умолчанию будут видны в таблице символов