假設有一個類B有一個智能指標成員,用于指向類物件的指標A。那么,在成員初始化器串列中初始化智能指標成員有什么缺點呢?我知道初始化比賦值更快(將在這里重置),但我不知道缺點。在成員初始化器串列中初始化智能指標有什么缺點?
#include <chrono>
#include <iostream>
#include <memory>
struct A {
};
struct B1 {
B1(): a(new A) {}
std::unique_ptr<A> a;
};
struct B2 {
B2() {
a.reset(new A);
}
std::unique_ptr<A> a;
};
int main() {
std::chrono::steady_clock::time_point begin = std::chrono::steady_clock::now();
for(auto i=0; i < 100000; i) {
B1 b;
// B2 b;
}
std::chrono::steady_clock::time_point end = std::chrono::steady_clock::now();
std::cout << (end - begin).count() << std::endl;
}
B1:8054043,B2:8894576
uj5u.com熱心網友回復:
沒有缺點,您應該在成員初始化器串列中對其進行初始化。但是我懷疑它是否會產生任何性能差異。(您的測驗不起作用。它要么在未啟用優化的情況下完成,要么在測量隨機噪聲。)
但是,通常建議不要new直接使用,而是std::make_unique改為使用。
此外,如果要初始化的值不依賴于建構式的引數,則使用默認初始化器可能是更好的方法:
struct B1 {
std::unique_ptr<A> a = std::make_unique<A>();
};
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/513860.html
標籤:C 智能指针成员初始化
