[英]Initializing static class object with no zero argument constructor c++
我的代碼的相關部分如下:
在foo.h中:
namespace foo_ns {
class Foo
{
static Class1 object1;
};
}
在foo.cpp中
#include <foo.h>
namespace foo_ns {
Class1 Foo::object1(/*another object. Need to call copy constructor*/)
}
在這里,“另一個對象”在main()
定義。 此外,Class1是大型庫的一部分,並且沒有零參數構造函數,因此簡單地刪除括號就no matching function call
在編譯期間產生no matching function call
錯誤。 據我了解,靜態初始化必須在任何功能之外執行。
那么,這有什么解決方法嗎?
當然,如果Class1
具有稍后可以使用的方法,那么一個簡單的解決方案是:
Class1 Foo::object1(some_rubbish);
// in main
object1 = Class1(the_real_initializer);
如果Class1
沒有有效的賦值運算符,但是可以安全地銷毀並重新創建它,則可以使用main編寫:
object1.~Class1();
new(&object1) Class1(the_real_initializer);
盡管如果此構造函數拋出該異常,則必須中止該程序。
如果無法在程序結束之前正確銷毀Class1
,則必須推遲其初始化,例如:
static std::unique_ptr<Class1> p_object1;
然后總的來說,當你准備好了,
p_object1.reset( new Class1(bla bla bla) );
這樣,您將必須更改訪問object1.
任何其他代碼object1.
改為使用p_object1->
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.