是否有可能還是很有意義的一類靜態動態變量,用new運算符初始化?C++靜態變量動態
1
A
回答
2
你指的是以下?是的,這是允許的。如果你需要
class Class {
static Base *b;
};
Base *Class::b = new Derived();
使用智能指針將其銷燬當程序退出
class Class {
static boost::scoped_ptr<Base> b;
};
boost::scoped_ptr<Base> Class::b(new Derived());
2
它可能不會讓有很大的意義,但你肯定可以做到這一點:
static int * p = new int(1);
這個問題是在具有破壞的對象。這可能沒有多大關係在實踐中,除非析構函數有一定的副作用(如寫入文件),您需要,在這種情況下,靜態智能指針將(可能)做的工作。
話雖如此,
static int i = 1;
似乎在幾乎所有情況下優選的。
編輯:我誤解了你的問題,但我會在這裏留下,因爲它確實建議模糊的好習慣。
1
如果你想確保它得到程序退出後的清理:
struct foo
{
static double* d;
};
namespace
{
void delete_double(void)
{
delete foo::d;
}
double* get_double(void)
{
double* result = new double();
atexit(delete_double);
return result;
}
}
double* foo::d = get_double();
或者使用智能指針(見Johannes answer)
1
在聲明中:
static cMyClass* p = new cMyClass() ;
將p
稱爲「靜態動態變量」是不正確的。它是一個類型爲cMyClass *的靜態指針變量,指向一個動態分配的對象。
通過稱之爲「靜中有動」的變量,你說得好像是一個悖論,而實際上它是一個簡單的東西,可能是完全合理的一個貧窮的描述。有兩個變量:1)靜態的指針,2)動態的對象。
相關問題
- 1. C++靜態變量
- 2. C++靜態變量
- 3. C++ - 靜態變量
- 4. 靜態與非靜態變量C++
- 5. C++中的靜態變量
- 6. C++:靜態成員變量
- 7. C++靜態成員變量
- 8. C#Webservice和靜態變量
- 9. 靜態變量 - Visual C
- 10. C#線程靜態變量
- 11. C中的靜態變量
- 12. c#:(靜態)班級變量
- 13. 靜態類中的靜態變量和非靜態類中的靜態變量
- 14. 動態鏈接庫中靜態變量的行爲(C/C++)
- 15. 靜態變量
- 16. 靜態變量
- 17. 靜態變量
- 18. 靜態變量
- 19. 靜態變量
- 20. 靜態變量
- 21. 靜態變量
- 22. 靜態變量
- 23. 如何使靜態變量動態?
- 24. C#靜態和常量變量內存
- 25. Objective-C靜態常量變量
- 26. 有什麼區別bettwen靜態和動態變量在C#中?
- 27. C#'動態'變量可以引用靜態類型嗎?
- 28. 靜態變量與靜態屬性
- 29. 非靜態/靜態變量錯誤
- 30. 靜態函數和非靜態變量
在這種情況下,有可能爲類的析構函數刪除靜態變量? – dmessf 2010-04-18 16:34:23
@Zibd,類的析構函數與此無關。該對象是在沒有任何'Class'構造函數的情況下創建的,並且它將被銷燬(如果您命令這樣做),而不使用其析構函數執行任何操作。 Con/destructor只對該類的實例有效。 – 2010-04-18 16:37:01
@Zibd:它*可能*但可能不是你想要的。如果你有一百萬個使用靜態變量的類的實例,並且只有一個停止存在,那麼剩下的就是使用你已經刪除的東西。也許你應該給我們一個更大的想法。 – GManNickG 2010-04-18 16:39:06