回答
使用new(this)
將重新構造成員變量。這可能會導致未定義的行爲,因爲它們並未首先被破壞。通常的模式是使用一個輔助函數:
class Object {
private:
void init(int, char *);
public:
Object();
Object(int, char *);
};
Object::Object() {
init(0, NULL);
}
Object::Object(int x, char *y) {
init(x, y);
}
void Object::init(int x, char *y) {
/* ... */
}
因此,在`this`上使用放置new,本身是未定義的行爲,還是隻有*潛在的*未定義的行爲,取決於該類有哪些成員?如果這個類只有POD類型的成員,那麼這樣做是否安全? – 2009-08-03 04:40:41
假設還有其他陷阱(虛擬功能等)也可以避免,潛在的。 ctors和dtors的行爲是非常明確的。如果所有成員都是POD,那麼最初的ctor和新的placement都不會做任何事情。 – MSalters 2009-08-03 07:52:35
我相信你想委託構造,像Java例如,這是還沒有到來。當的C++ 0x來,你可以做這樣的:
Object::Object() : Object(0, NULL)
{
}
您的意思是C++ 0x嗎?儘管直到201x還沒有準備好,它的名字仍然是C++ 0x。如果你確實是指C++ 1x,那麼這是一個特別無用的答案。 – 2009-08-03 03:29:44
如果Object
是POD類型,你可以用這種方式初始化:
class Object
{
int x;
int y;
// ...
public:
Object() { memset(this, 0, sizeof Object); }
};
- 1. 使用新操作符有什麼問題?
- 2. 這個try_convert用法有什麼問題?
- 3. 這個os.path用法有什麼問題?
- 4. 這個Lambda操作有什麼作用?
- 5. 這個字符串有什麼問題?
- 6. 這個jQuery語法有什麼問題?
- 7. 這個jQuery方法有什麼問題?
- 8. 這個floodfill算法有什麼問題?
- 9. 這個Swift語法有什麼問題?
- 10. 這個php語法有什麼問題?
- 11. 這個JSON語法有什麼問題?
- 12. 這個語法有什麼問題?
- 13. 這個sql語法有什麼問題?
- 14. 這個Javascript語法有什麼問題?
- 15. 這個applicationDidEnterBackground方法有什麼問題?
- 16. 這個javascript語法有什麼問題
- 17. 這個c#方法有什麼問題?
- 18. 這個語法有什麼問題?
- 19. 這個SQL語法有什麼問題?
- 20. 這個rails語法有什麼問題?
- 21. 這個語法有什麼問題?
- 22. 這個語法有什麼問題?
- 23. 這個Pascal語法有什麼問題?
- 24. 這個語法有什麼問題?
- 25. 這個SQL語法有什麼問題?
- 26. 這個dtd語法有什麼問題?
- 27. 這個javascript語法有什麼問題?
- 28. 這個SPF語法有什麼問題?
- 29. 這個語法有什麼問題?
- 30. 這個語法有什麼問題?
壞主意。會員未被正確銷燬。並維護它需要一個問題stackoverflow.com問,如果這是一個好主意。 – 2009-08-03 03:47:00