Лежит здесь. Слайдов много. Но действующим C++ разработчикам, особенно не освоившим еще вполне C++11 -- смотреть обязательно!
Очень показателен пример из презентации: как переписали функцию, не использовавшую исключения, и что из этого получилось.
Было:
static acl_t CreateReadOnlyForCurrentUserACL(void) { acl_t theACL = NULL; uuid_t theUUID; int result; result = mbr_uid_to_uuid(geteuid(), theUUID); // need the uuid for the ACE if (result == 0) { theACL = acl_init(1); // create an empty ACL if (theACL) { Boolean freeACL = true; acl_entry_t newEntry; acl_permset_t newPermSet; result = acl_create_entry_np(&theACL, &newEntry, ACL_FIRST_ENTRY); if (result == 0) { // allow result = acl_set_tag_type(newEntry, ACL_EXTENDED_ALLOW); if (result == 0) { // the current user result = acl_set_qualifier(newEntry, (const void *)theUUID); if (result == 0) { result = acl_get_permset(newEntry, &newPermSet); if (result == 0) { // to read data result = acl_add_perm(newPermSet, ACL_READ_DATA); if (result == 0) { result = acl_set_permset(newEntry, newPermSet); if (result == 0) freeACL = false; // all set up and ready to go } } } } } if (freeACL) { acl_free(theACL); theACL = NULL; } } } return theACL; } |
Стало:
static acl_t CreateReadOnlyForCurrentUserACL() { ACL theACL(1); acl_entry_t newEntry; acl_create_entry_np(&theACL.get(), &newEntry, ACL_FIRST_ENTRY); // allow! acl_set_tag_type(newEntry, ACL_EXTENDED_ALLOW); // the current user! uuid_t theUUID; mbr_uid_to_uuid(geteuid(), theUUID); // need the uuid for the ACE acl_set_qualifier(newEntry, (const void *)theUUID); acl_permset_t newPermSet; acl_get_permset(newEntry, &newPermSet); // to read data acl_add_perm(newPermSet, ACL_READ_DATA); acl_set_permset(newEntry, newPermSet); // all set up and ready to go return theACL.release(); } |
Почувствуйте разницу, что называется.
Комментариев нет:
Отправить комментарий