Re[16]: Почему настоящие программисты избегают C++
От: ansi  
Дата: 06.06.05 01:03
Оценка:
AVC>
AVC>private:
AVC>    int *p;
AVC>    size_t size;
AVC>

AVC>Так вот, я просто хочу обратить Ваше внимание на то, что для компилятора p и size — по прежнему две отдельные переменные, не имеющие между собой ничего общего. Если при реализации класса CProtectedArrayOfInt Вы (не дай Бог! ) допустите ошибку, компилятор ничем не сможет Вам помочь.
А если разработчики Оберона допустят ошибку... В любом случае, ошибка, если она есть, локализована в одном месте и если класс работать не будет, то работать он не будет везде.
Re[14]: Почему настоящие программисты избегают C++
От: Михаил  
Дата: 06.06.05 01:26
Оценка:
Здравствуйте, AVC, Вы писали:

AVC>И откуда же, позвольте полюбопытствовать, возьмутся проверки в отладочном коде?

AVC>Или проверки и в отладочном коде не нужны?

Далее имею в виду MSVC. Тем не менее согласен, что другие компиляторы С/С++ могут не иметь этого или иметь другое поведение (что лично мне фиолетово).
1. Не раз уже обсуждавшийся _DEBUG.
2. Из MSDN: (цитирую полностью, т.к. не уверен, что этот анекдот знают по номеру)

Memory Management and the Debug Heap
Two of the most common and intractable problems that programmers encounter are overwriting the end of an allocated buffer and leaking memory (failing to free allocations after they are no longer needed). The debug heap provides powerful tools to solve memory allocation problems of this kind.

The debug versions of the heap functions call the standard or base versions used in release builds. When you request a memory block, the debug heap manager allocates from the base heap a slightly larger block of memory than requested and returns a pointer to your portion of that block. For example, suppose your application contains the call: malloc( 10 ). In a release build, malloc would call the base heap allocation routine requesting an allocation of 10 bytes. In a debug build, however, malloc would call _malloc_dbg, which would then call the base heap allocation routine requesting an allocation of 10 bytes plus approximately 36 bytes of additional memory. All the resulting memory blocks in the debug heap are connected in a single linked list, ordered according to when they were allocated:

The additional memory allocated by the debug heap routines is used for bookkeeping information, for pointers that link debug memory blocks together, and for small buffers on either side of your data to catch overwrites of the allocated region.

Currently, the block header structure used to store the debug heap’s bookkeeping information is declared as follows in the DBGINT.H header file:

typedef struct _CrtMemBlockHeader
{
// Pointer to the block allocated just before this one:
struct _CrtMemBlockHeader *pBlockHeaderNext;
// Pointer to the block allocated just after this one:
struct _CrtMemBlockHeader *pBlockHeaderPrev;
char *szFileName; // File name
int nLine; // Line number
size_t nDataSize; // Size of user block
int nBlockUse; // Type of block
long lRequest; // Allocation number
// Buffer just before (lower than) the user's memory:
unsigned char gap[nNoMansLandSize];
} _CrtMemBlockHeader;

/* In an actual memory block in the debug heap,
* this structure is followed by:
* unsigned char data[nDataSize];
* unsigned char anotherGap[nNoMansLandSize];
*/

The “NoMansLand” buffers on either side of the user data area of the block are currently 4 bytes in size, and are filled with a known byte value used by the debug heap routines to verify that the limits of the user’s memory block have not been overwritten. The debug heap also fills new memory blocks with a known value. If you elect to keep freed blocks in the heap’s linked list as explained below, these freed blocks are also filled with a known value. Currently, the actual byte values used are as follows:

NoMansLand (0xFD)

The “NoMansLand” buffers on either side of the memory used by an application are currently filled with 0xFD.

Freed blocks (0xDD)

The freed blocks kept unused in the debug heap’s linked list when the _CRTDBG_DELAY_FREE_MEM_DF flag is set are currently filled with 0xDD.

New objects (0xCD)

New objects are filled with 0xCD when they are allocated.

...А отсюда наливаем, когда рецепт написан совсем неразборчиво...
Re[9]: Почему настоящие программисты избегают C++
От: Михаил  
Дата: 06.06.05 03:29
Оценка:
Здравствуйте, ZetRooT, Вы писали:

ZRT>Здравствуйте, transglucator, Вы писали:


T>>жена — Pascal

T>>проститутка — C++
T>>любовница — ?


ZRT>тогда уж Java


не-а...
богатая дама.
...А отсюда наливаем, когда рецепт написан совсем неразборчиво...
Re[10]: Почему настоящие программисты избегают C++
От: Михаил  
Дата: 06.06.05 03:55
Оценка:
Здравствуйте, nixite, Вы писали:

MN>>Да согласен — ваша правда... это я поторопился... но как-то у меня такой проблемы никогда не было... наверное потому, что для работы с контейнерами C++ всегда использовал итераторы, а для доступа к массивам в стиле pure C использовал знаковый int и никогда не путал эти понятия между собой, чего и вам советую... ну или если вы моему совету не внемлите, то обращайтесь к С. Ю. Губанову — он вам других советов надаёт


N>для любителей signed int'ов:


N>положим захотелось нам искать среднее двух чисел и написали мы функцию:

N>int kaka (int a, int b){return (a+b)/2;}

N>и всё вроде тип-топ, но вот тут сунули нам два числа (вполне корректных):


N>int a = 2113929216;

N>int b = 2113929210;

А сколько надо
Т.е. какой смысл должен быть у среднего? Почему необходимо использовать signed int в таких диапазонах?
Может, лучше подойдет unsigned?
...А отсюда наливаем, когда рецепт написан совсем неразборчиво...
Re[12]: Почему настоящие программисты избегают C++
От: lepsai  
Дата: 24.06.05 23:51
Оценка:
Здравствуйте, ydab, Вы писали:

D>>Ну зачем же ставить заведомо нерешаемые задачи?

D>>Над такими лучшие умы человечества бьются не один десяток лет, а Вы хотите чтоб Вам на каком-то инетрнет-форуме всё разрулили.

Y>
Y>int kaka (int a, int b)
Y>{
Y>   return (a/2 + b/2);
Y>}
Y>



int kaka (int a, int b)
{
    return (a>>1 + b>>1);
}


Re[7]: Почему настоящие программисты избегают C++
От: lepsai  
Дата: 25.06.05 00:18
Оценка: +1
Здравствуйте, d Bratik, Вы писали:

DB>И все же я пока не видел ни одной промышленной GUI бибилиотеки на С++, которая бы отдаленно приближалась по качеству к VCL и .NET Framework. Обыскал весь Интернет — таковой в природе нет. Qt более-менее ничего, но когда основательно начинаешь пользовать, начинаешь плеваться.


ну ну... Расскажите нам Уважаемый, что же Вам не понравилсоь в Qт. От чего же пришлось плевацья? Было бы очен интересно умного человека послушать, к тому же и настоящего программиста...
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.