как вызвать конструктор без опреатора new
От: Аноним  
Дата: 10.11.11 14:16
Оценка: :))) :))
здравствуйте. подскажите, как вызвать конструктор без опреатора new
class A
{
private:
Session s;
SubscriptionManager subscriptions;
public:
A();
....
}


надо инициализировать subscriptions

на такой вариант компилятор ругается (именно на new, как ругается щас не напишу)


subscriptions = new SubscriptionManager(s);

конструктор с параметром Session в классе SubscriptionManager есть

в примерах есть такой вариант инициализации, но он не подходит

A::A(Session& s, uint l, bool summary_) :
session(s), subscriptions(s), counter(0), limit(l),
queue(session.getId().getName()), total(),
min(std::numeric_limits<double>::max()), max(), summary(summary_)
{}
subscriptionmanager subscriptions;
Re: как вызвать конструктор без опреатора new
От: Мишень-сан  
Дата: 10.11.11 15:03
Оценка:
Здравствуйте, Аноним, Вы писали:


А>здравствуйте. подскажите, как вызвать конструктор без опреатора new

А>
А>class A
А>{
А>private:
А>Session s;
А>SubscriptionManager subscriptions;
А>public:
А>A();
А>....
А>}
А>


А>надо инициализировать subscriptions


А>на такой вариант компилятор ругается (именно на new, как ругается щас не напишу)



А>subscriptions = new SubscriptionManager(s);


А>конструктор с параметром Session в классе SubscriptionManager есть


А>в примерах есть такой вариант инициализации, но он не подходит


А>A::A(Session& s, uint l, bool summary_) :

А> session(s), subscriptions(s), counter(0), limit(l),
А> queue(session.getId().getName()), total(),
А> min(std::numeric_limits<double>::max()), max(), summary(summary_)
А>{}

class A
{
public:
  A()
    : i(1)
  { }
private:
  int i;
};

...
void* operator new(size_t sz, void* place)
{
  return place;
}

...

A a;
new(&a) A();
Re: как вызвать конструктор без опреатора new
От: jazzer Россия Skype: enerjazzer
Дата: 10.11.11 16:06
Оценка:
Здравствуйте, Аноним, Вы писали:

А>в примерах есть такой вариант инициализации, но он не подходит


Почему не подходит? Именно он — правильный.
jazzer (Skype: enerjazzer) Ночная тема для RSDN
Автор: jazzer
Дата: 26.11.09

You will always get what you always got
  If you always do  what you always did
Re: как вызвать конструктор без опреатора new
От: johny5 Новая Зеландия
Дата: 14.11.11 03:09
Оценка:
Здравствуйте, Аноним, Вы писали:


А>надо инициализировать subscriptions


А>на такой вариант компилятор ругается (именно на new, как ругается щас не напишу)



Видимо да, чувак не разобрался с инициализацией мемберов класса. Мемберы не инициализируются new, их конструкторы вызываются явно в списках инициализации. Нужно написать новый вид конструктора, который бы тебе подошёл, например
A::A(Session& s) :
    session(s), subscriptions(s), counter(0), limit(100),       // это список инициализации мемберов пошёл
    queue(session.getId().getName()), total(),
    min(std::numeric_limits<double>::max()), max(), summary(0)
{}
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.