I need to know what are the advantages of the Apex records sharing compared to the standard record sharing with sharing rules?
When to use Apex records sharing over the standard record sharing?
The advantage of Apex sharing is that you can calculate sharing conditions that otherwise cannot be done by standard and criteria-based sharing rules. For example, you could base sharing on an web service call, a separate business logic sharing table, standard or custom fields, etc.
For the majority of use cases, the various sharing systems in Salesforce should be sufficient. You have Role-Based Sharing, Rule-Based Sharing, Criteria-Based Sharing, Territory-Based Sharing, Team Member Sharing, and Implicit Sharing. Some or all of these can be used in most ordinary situations. You should only use Apex sharing if no standard sharing configuration covers your business use case.
The documentation includes an example whereby the "hiring managers" and "recruiters" are given access to Job records so that they can see the details of the person being hired. This is not something you could accomplish using just standard share functionality, so using Apex Managed Sharing allows these shares to be created. There's actually very little use for Apex Managed Sharing, but you should be aware of its capabilities in case you ever need it.
Note that both of them create share records under the hood. Most of objects in salesforce (exception may be a detail object in master-detail relationships) have a junction object with name __share that holds share records.
It’s advisable not to use apex sharing unless you absolutely need it and use the platform sharing features. This is because you can do sharing via clicks and platform automatically handles recalculation of sharing records for you.
Using clicks you can activate/deactivate/change criteria or rules via platform provided settings while with apex you have maintain lot of code to do recalculation.The whole idea of salesforce is anyone without knowledge of code can maintain the system. With apex you are adding a dependency that one must know code.
You should also note that some times the declarative sharing features won’t need your need and in that case apex provides that flexibility and capability.