我有以下簡單的代碼:對象之前使用對象成員構造
#include <iostream>
#include <vector>
template <class Derived>
struct Base
{
Base()
{
static_cast<Derived*>(this)->foo();
}
std::vector<int> m_ints;
};
struct Derived : Base<Derived>
{
Derived() : Base()
{
std::cout << a;
}
void foo()
{
m_ints.push_back(37);
a = 4;
}
int a;
};
int main()
{
Derived d;
return 0;
}
我瞭解創建對象時調用構造函數的順序。構造函數從「最基礎 - >向下」調用。所以在Base構造函數中Derived對象沒有完全構造。
1)它是安全的,叫Derived::foo
在Base
構造,當Derived::foo
做沒有觸摸Derived
對象?我的意思是,當沒有像a = 4
這樣的行時,只需觸碰Base
對象。
2)如果我運行代碼發佈,它確實有效,雖然我碰a
不應該在那個時候存在。它保證工作嗎? (我測試VS2013,VS2010和GCC 4.8.1 on Ideone)
你想做什麼? – BlackMamba
看看[這個](http://stackoverflow.com/a/23417203/2567683) –