Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

Может ли объект-член, или объект-элемент достучаться к содержащему его? - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Класс, каждый экземпляр которого имеет поле UID с гарантированно уникальным значением http://www.cyberforum.ru/cpp-beginners/thread1118817.html
Как бы это поле реализовать? При передаче экземпляра значению любой функции, или оператору и при записи в экземпляр возвращаемого значения функции, или оператора, в том числе, в составе другого...
C++ Реализовать АТД “Очередь” на основе усовершенствованного циклического массива Прошу помочь с написанием решения для данной задачи: Создайте реализацию АТД “очередь” на основе усовершенствованного циклического массива, который автоматически увеличивает размер вдвое при... http://www.cyberforum.ru/cpp-beginners/thread1118744.html
C++ Закодировать файл. Взять 7 байт. Первый бит каждого байта переместить в 8 байт
Нужно открыть бинарный файл и закодировать следующим образом. Взять 7 байт. Первый бит каждого байта переместить в 8 байт. То есть, например: 10101010 01010110 00001100 00011000 00011000...
C++ Записать программу, выводящую изображенную фигуру
Пользователь вводит некий символ. Записать программу, выводящую изображенную на рис. 2.10 фигуру, где вместо символа «*» должен быть символ, введенный пользователем. ***** ** * ** *****
C++ UrlDecode, Работа с кириллицей http://www.cyberforum.ru/cpp-beginners/thread1118709.html
Сам пишу на C#. Тут возникла задача "общания с прогой", написанной в С++ 6.0. Проблема возникла с передачей данных с русским текстом (как есть работает, но надо шифровать, поэтому заворачиваю в...
C++ Координаты вектора умножить на число вот есть класс, мне нужно координаты вектора умножить на число,через функцию используя прототип.Как это сделать ? Функцию в С++ еще не проходили, сказали делать по подобию Си #include "stdafx.h"... подробнее

Показать сообщение отдельно
DrOffset
7320 / 4420 / 1001
Регистрация: 30.01.2014
Сообщений: 7,258
14.03.2014, 14:08
Цитата Сообщение от taras atavin Посмотреть сообщение
адреса агрегирующих объектов могут в этот момент поменяться.
Чтобы этого не происходило надо пользоваться С++ средствами для перераспределения памяти, которые вызовут соответствующие деструкторы, соответствующие конструкторы копирования и т.д. Либо реализовывать это поверх realloc самостоятельно. realloc в чистом виде не годится для любых сложны C++ классов, а не только в этом случае.

Добавлено через 9 минут
taras atavin,
Посмотри на досуге вот этот пример
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <vector>
#include <cstdio>
 
class MyTest
{
public:
    MyTest()               {  printf("%s\n", __PRETTY_FUNCTION__); }
    MyTest(MyTest const &) {  printf("%s\n", __PRETTY_FUNCTION__); }
    ~MyTest()              {  printf("%s\n", __PRETTY_FUNCTION__); }
};
 
int main()
{
    std::vector<MyTest> myTest;
    myTest.reserve(1);
 
    myTest.push_back(MyTest());
    puts("------");
    myTest.push_back(MyTest());
    puts("------");
    myTest.push_back(MyTest());
    puts("------");
}
если хранить приведенный мной выше класс в таком контейнере, то рассогласования ссылок внутри объектов никогда не произодет. Т.к. будут гарантированно вызваны все конструкторы и деструкторы.
А вот копировать с помощью, например, memcpy не-POD типы в С++ в принципе не очень хорошая идея.
0
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru