Áp dụng thế hệ vtable C++ có thể được thực hiện trong MSVC bằng cách sử dụng thuộc tính __declspec(novtable)
. Tuy nhiên, có vẻ như là there is no equivalent attribute cho trình biên dịch GNU C++. Thực tế là để lại vtables cho các lớp học ảo tinh khiết không cần thiết liên kết trong __cxa_abort()
và nhiều người khác, và tôi muốn tránh điều này xảy ra bởi vì tôi đang lập trình cho một hệ thống nhúng. Vì vậy, tôi nên làm gì?Làm cách nào để loại bỏ thế hệ vtable C++ cho các lớp ảo thuần túy bằng G ++?
struct ISomeInterface
{
virtual void Func() = 0;
};
class CSomeClass : public ISomeInterface
{
virtual void Func();
}
void CSomeClass::Func()
{
//...
}