[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[jfriends] ¥³¥Ô¡¼¥³¥ó¥¹¥È¥é¥¯¥¿¡¼




> 1. clone() ¤Ï¡¢C++ ¤Ç¸À¤¦¥³¥Ô¡¼¥³¥ó¥¹¥È¥é¥¯¥¿¡¼¤ò½ñ¤«¤Ê¤¤¤ÇºÑ¤Þ¤»¤ë¤¿¤á¤Ë
>    ºî¤é¤ì¤¿¤â¤Î¤Ê¤Î¤À¤í¤¦¤«?

°ã¤¦¤Î¤Ç¤Ï¤Ê¤¤¤Ç¤·¤ç¤¦¤«¡£ÍÑÅÓ¤¬½Å¤Ê¤ëÉôʬ¤â¤¢¤ê¤Þ¤¹¤¬¡¢
ËܼÁŪ¤Ë¤Ï clone()¤È¥³¥Ô¡¼¥³¥ó¥¹¥È¥é¥¯¥¿¤Ç¤ÏÌÜŪ¤¬°Û¤Ê¤ê
¤Þ¤¹¤«¤é¡£

close()¤Ï¥¤¥ó¥¹¥¿¥ó¥¹¤ÎÊ£À½¤òºî¤ë¤³¤È¤¬ÌÜŪ¤Ç¤¹¤¬¡¢
¥³¥Ô¡¼¥³¥ó¥¹¥È¥é¥¯¥¿¤Ï¾¤Î¥¤¥ó¥¹¥¿¥ó¥¹¤ÎÃͤò¤â¤é¤Ã¤Æ
¤ß¤º¤«¤é¤ò½é´ü²½¤¹¤ë¤³¤È¤¬ÌÜŪ¤Ç¤¹¡£
¥³¥Ô¡¼¥³¥ó¥¹¥È¥é¥¯¥¿¤«¤é close()¤òºî¤ë¤³¤È¤Ï¤Ç¤­¤Þ¤¹¤¬¡¢
¤½¤ÎµÕ¤Ï̵Íý¤Ç¤¹¡£

class A { // C++ ¤Î¥³¡¼¥É¤Ç¤¹
public:
    A();
    A(A& a);
    A* clone() { return new A(*this); }
};

C++Ū¤Ê¥³¥Ô¡¼¥³¥ó¥¹¥È¥é¥¯¥¿¤¬Íߤ·¤±¤ì¤Ð¼«Á°¤Ç½ñ¤¯É¬Íפ¬¤¢¤ë¤È»×¤¤¤Þ¤¹¡£
¤·¤«¤·¤Ê¤¬¤é¡¢Java¤Ç¤ÏC++¤Î¥Ç¥Õ¥©¥ë¥È¥³¥Ô¡¼¥³¥ó¥¹¥È¥é¥¯¥¿¤¬Ìµ¤¤¤¿¤á¤Ë
¥á¥ó¥ÐËè¤Î¥³¥Ô¡¼¤ò¤¹¤Ù¤Æ¥³¡¼¥Ç¥£¥ó¥°(clone()¤Î¸Æ¤Ó½Ð¤·¤òÎóµ­)¤·¤Ê¤±¤ì
¤Ð¤Ê¤é¤º¡¢ÌÌÅݤǤ¹¡£
 
#######
>   java.lang.Object ¤Ï Cloneable ¤ò¼ÂÁõ¤·¤Æ¤¤¤Ê¤¤¤è¤¦¤À¤¬¤Ê¤¼¤«?

¼ÂÁõ¤·¤Æ¤¤¤¿¤é¡¢Object¤«¤éÇÉÀ¸¤¹¤ë¥¯¥é¥¹¤Ï¤½¤ì¤ò·Ñ¾µ¤·¤Æ¡¢
¤¹¤Ù¤Æ¤Î¥¯¥é¥¹¤¬clone²Äǽ¤Ë¤Ê¤Ã¤Æ¤·¤Þ¤Ã¤Æ¡¢°ÕÌ£¤¬¤¢¤ê¤Þ¤»¤ó¡£

clone()¥á¥½¥Ã¥É¤Ï class Object ¤ÇÍѰդµ¤ì¤Æ¤¤¤Þ¤¹¡£
Object.clone()¤Ï¡¢¤½¤Î¥¤¥ó¥¹¥¿¥ó¥¹¤Î¥¯¥é¥¹¤¬Cloneable ¤ò¥¤¥ó¥×¥ê¥á¥ó¥È
¤·¤Æ¤¤¤Ê¤±¤ì¤Ð¡¢Îã³°(CloneNotSupportedException)¤òȯÀ¸¤·¡¢¥¤¥ó¥×¥ê¥á¥ó¥È
¤·¤Æ¤¤¤ì¤Ð¤½¤Î¥¤¥ó¥¹¥¿¥ó¥¹¤Î¡ÖÀõ¤¤¥³¥Ô¡¼¡×¤ò¼Â¹Ô¤¹¤ë¤È¤¤¤¦»Å³Ý¤±¤Ç¤¹¡£
¡Ö¿¼¤¤¥³¥Ô¡¼¡×¤ò¤·¤¿¤±¤ì¤Ð¡¢clone()¤òÇÉÀ¸¥¯¥é¥¹Â¦¤Ç¥ª¡¼¥Ð¥é¥¤¥É¤·¤Æ¡¢
¿¼¤¤¥³¥Ô¡¼¤Î¤¿¤á¤Î½èÍý¤ò½ñ¤¯É¬Íפ¬¤¢¤ê¤Þ¤¹¡£