Обойти семантику копирования в C ++
Пожалуйста, рассмотрите этот код:
class A
{
};
int main()
{
std::vector<A> test;
test.push_back(A());
}
Конструктор и деструктор будут вызваны дважды, также память будет выделена дважды, и объект будет скопирован, что теперь не только потенциально плохо сказывается на производительности, но и может привести к ошибкам во время выполнения, особенно если в деструкторе происходит некоторая очистка. Способ, которым я обычно обхожу это, состоит в том, чтобы просто создать вместо него вектор указателей:
std::vector<A*> test;
test.push_back(new A());
Мой вопрос в два раза, это обычная практика и это хорошая практика? Или есть лучший способ? Если это окажется обманом, пожалуйста, дайте мне знать, и я закрою вопрос, но я ничего не смог найти при поиске.